2013-08-07 121 views
1

我無法將我的dllwrap -ed Fortran代碼導入到C#中。我真的正在研究一些比我在這裏展示的例子更復雜的東西,但我想讓這個簡單的例子工作,然後解決全面的問題。我正在與MinGW和MSYS合作。在C中導入Fortran dll#

這裏是我的Fortran代碼,在文件MyThreeDll.f:

integer function three() 
    three = 3 
    return 
    end function 

然後我跑gfortran -c MyThreeDll.f一個MyThreeDll.o文件的預期輸出。我跑的下一個命令是
dllwrap --export-all-symbols MyThreeDll.o -gfortran -o MyThreeDll.dll
並得到一個dll文件。然後,我將進入Visual Studio 2010中C#控制檯項目的文件夾,並添加到項目中(它絕對不會讓我將其添加爲參考),並嘗試運行它。然後這發生。

Screencap of my Visual Studio setup

我試圖使DLL與gfortran -shared,但它並沒有幫助。在函數名稱之前和/或之後添加下劃線也沒有幫助。所以現在我被卡住了,因爲這是谷歌帶領我的。

+4

在解決方案資源管理器窗口中選擇DLL,並將其「複製到輸出目錄」屬性設置爲「複製如果更新」。 –

+0

把DLL放在你exe文件所在的文件夾中。 –

+0

@HansPassant謝謝。再加上將這個函數重命名爲'three _()',這個技巧就成了。發佈作爲答案,我會接受。 – Arthur

回答

0

@HansPassant的評論解決了我的問題。對於後人我想補充一點,如果我除了所有其他的東西運行帶有選項--output-def MyThreeDll.defdllwrap命令,我將獲得包含函數,即three_()的得到的名稱,而不是three()在.def文本文件。

這是dllwrap在gfortran的幫助下做的事情,顯然,它可以被稱爲隨選項而改變,儘管我沒有能量或需要尋找如何。