C#在Fortran DLL中找不到入口点

时间:2011-01-12 16:04:27

标签: c# fortran dllexport


我得到了一个有效的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'”。我需要做些什么才能使它发挥作用? 感谢名单

2 个答案:

答案 0 :(得分:1)

使用像PE explorer这样的工具查看你的dll。它会告诉您导出的确切功能。

答案 1 :(得分:1)

This thread建议您需要一个.def文件来声明函数exports(就像您在本机Windows编程中一样)