2016-08-23 132 views
0

我有一些DLL,我想在VISUAL STUDIO的FORTRAN項目中使用,但我找不到。如何將dll鏈接到fortran(visual studio)?

這是我用來找出如何的簡單代碼。

使用Visual Studio我創建了一個DLL從這個

subroutine printing 

    !DEC$ ATTRIBUTES DLLEXPORT::printing 
    print*,"dll naimi created" 

    end subroutine printing 

我加的DLL鏈接到項目>屬性>鏈接>常規>附加庫目錄

主程序:

program Console11 
implicit none 

call printing 

end program Console11 

錯誤:Error 1 error LNK2019: unresolved external symbol _PRINTING referenced in function _MAIN__.

other soluti與此相關的ons建議使用在生成DLL時創建的.lib,但在我的真實情況下,我只有沒有.lib的DLL。

那麼如何使用DLL ...?

+0

Visual Studio開箱即用對Fortran沒有任何瞭解。你正在使用哪種Fortran編譯器? – IanH

回答

1

您似乎試圖使用DLL作爲鏈接器的輸入文件。

(你似乎也試圖爲一個鏈接器選項指定一個文件,它需要一個目錄爲鏈接器指定一個額外的輸入文件,或者將文件添加到項目中,就像附加一個源文件一樣,或者使用「Linker> Input> Additional dependencies」項目屬性,你在帖子中提到的屬性會告訴鏈接程序在哪裏(哪些目錄)搜索這些額外的依賴關係。)

與unix約定不同,在Windows上構建可執行文件和其他DLL時與DLL鏈接。該DLL通常不包含鏈接器的必要信息 - 而是該信息包含在導入庫(這只是典型的.lib靜態庫的一個變體)或等價物中。

如果您能夠成功構建DLL,那麼您可能會在與DLL相同的目錄中找到該DLL的導入庫。將該導入庫作爲需要該DLL的項目的附加依賴項提供。

當您在Windows上使用導入庫鏈接EXE或其他DLL時,加載可執行代碼時操作系統會自動加載目標DLL。這被稱爲加載時間動態鏈接。

如果你沒有一個DLL導入庫,那麼你的選擇是:

  • 詢問是誰建的DLL的導入庫的人。

  • 使用運行時動態鏈接引用DLL,而不是加載時間。這意味着您可以在程序中使用Windows API函數LoadLibrary,GetProcAddress和朋友明確告訴操作系統加載特定的DLL並獲取函數指針的地址。如果您使用的是英特爾Fortran,那麼完整的示例將隨編譯器一起安裝 - 請參閱文件「C:\ Program Files(x86)\ IntelSWTools \ samples_2016 \ en \ compiler_f \ psxe \ DLL.zip」或類似文件。

  • 從DLL中的最小信息生成一個導入庫,以及有關您可能具有的DLL的其他信息。一種方法是編寫一個模塊定義文件(。def)爲DLL,然後使用LIB實用工具將該def文件轉換爲導入庫。一個例子見How to make a .lib file when have a .dll file and a header file

相關問題