我得到了一个工作的 FORTRAN 程序,我必须为它编写 C# GUI(不要问为什么)。这个程序已经有了 FORTRAN GUI,所以我把所有的计算子程序都提取出来放到 FORTRAN dll 中。该 dll 由 4 个文件构成:一个静态库、一个 FORTRAN77 文件(.for)和两个 FORTRAN90 文件(.f90)。我已将所有应该从 C# 代码中调用的子例程放入 EXPORT.f90。
FORTRAN 代码:
MODULE MYVAR
REAL*8 LK
COMMON LK
END MODULE
SUBROUTINE SETLK(NEWLK)
!DEC$ ATTRIBUTES DLLEXPORT :: SETLK
USE MYVAR
REAL*8 NEWLK
LK = NEWLK
END
SUBROUTINE GETLK(LKOUT)
!DEC$ ATTRIBUTES DLLEXPORT :: GETLK
USE MYVAR
REAL*8, INTENT(OUT):: LKOUT
LKOUT = LK
END
现在我正在尝试用 C# 调用它们
[DllImport(@"MYDLL.dll", CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.Cdecl,
EntryPoint="SETLK")]
public static extern void SETLK(ref double NEWLK);
[DllImport(@"MYDLL.dll", CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.Cdecl,
EntryPoint="GETLK")]
public static extern void GETLK(out double LKOUT);
static void Main(string[] args)
{
double d1 = 1.234;
SETLK(ref d1);
double d2;
GETLK(out d2);
Console.WriteLine(d2.ToString());
}
我得到 EntryPointNotFoundException“无法在 'MYDLL.dll' 中找到入口点 'SETLK'”。我该怎么做才能让它工作?
谢谢