我被給了一個FORTRAN程序,我必須爲它編寫C#GUI(不要問爲什麼)。這個程序已經有了FORTRAN GUI,所以我把所有的計算子程序都放到了FORTRAN dll中。這個DLL是由4個文件構成的:一個靜態庫,一個FORTRAN77文件(.for)和兩個FORTRAN90文件(.f90)。我已經把所有的子程序從C#代碼中調用到EXPORT.f90中。
Fortran代碼:C#在Fortran dll中找不到入口點
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'」。我必須做些什麼才能使它工作?
Thanx
謝謝。它的工作,但我仍然無法得到爲什麼我必須寫EXPORT _SETLK @ 4而不是EXPORT SETLK。如果只是SETLK,我會得到3個警告:1.找不到符號「SETLK」的唯一匹配; 2. _SETLK在。\ Debug \ EXPORT.obj中定義; 3. _SETLK @ 4在。\ Debug \ EXPORT.obj中定義;那會導致錯誤 – 2011-01-12 18:28:37