[英]Fortran dll in C# gives Unable to find an entry point error
在這里尋求幫助。 我試圖通過Windows 10上的Visual Studio 2017在C#應用程序中使用fortran dll。我從沒見過fortran代碼。 因此,我使用記事本++中的簡單程序創建了一個示例dll。
subroutine Add(x, y, total)BIND(C,NAME="Add")
!DEC$ ATTRIBUTES DLLEXPORT, ALIAS: 'Add'::Add
integer, intent (in) :: x
integer, intent (in) :: y
integer, intent (inout) :: total
total = x + y
end subroutine
我在Windows 10中使用MingW fortran編譯器通過以下命令編譯了此代碼(名為console.f90的一個文件):
gfortran -c -o C:\Users\Desktop\Temp\console.o C:\Users\Desktop\Temp\console.f90
gfortran -shared -mrtd -o C:\Users\Desktop\Temp\console.dll C:\Users\Desktop\Temp\console.o
這給了我console.dll。
現在,我在VS 2017中打開了一個新的C#控制台項目。將體系結構更改為x86(x64給我帶來了錯誤的格式錯誤)。 將fortran dll(console.dll)放在與我的項目相同的文件夾中,並包含在項目中,並將屬性設置為“如果更新則復制”,以便將其復制到bin \\ debug。
將此行寫為P / Invoke
[DllImport("console.dll", EntryPoint = "Add", CallingConvention = CallingConvention.StdCall)]
public static extern void Add([In] int x, [In] int y, [In, Out] int t);
然后在我的主要功能中使用了
int a = 12;
int b = 30;
int t = 0;
Add(a, b, t);
雖然在運行應用程序時執行Add(a,b,t)的那一刻,我卻收到了一個'EntryPointNotFound'異常。 因此,我使用了DependencyWalker和Dumpbin來查看函數是否已導出且名稱正確。 結果如下:
我看到我的dll是x86,其他的是x64,這是問題嗎? 依賴項查詢器還顯示了3個dll依賴項“ lib ...”。 我也將它們放置在項目文件夾中,並應用了相同的屬性。 仍然沒有運氣。 感謝您的幫助。 謝謝
我已經將平台選擇設置為Debug,這導致了問題。 通過配置管理器添加x86選項並選擇相同選項可以解決我的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.