我得到了一个有效的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'”。我需要做些什么才能使它发挥作用? 感谢名单
答案 0 :(得分:1)
使用像PE explorer这样的工具查看你的dll。它会告诉您导出的确切功能。
答案 1 :(得分:1)
This thread建议您需要一个.def文件来声明函数exports(就像您在本机Windows编程中一样)