簡體   English   中英

C#中的Fortran dll導致無法找到入口點錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM