VS---《在VS2010中 使用C++創建和使用DLL》(001)
需要學習制作和使用動態庫,現在知道:DLL調用有兩種方式,一種是靜態調用,另外一種是動態調用。詳細的還不算明白,等后期深入學習在詳細記錄,這里先簡單記錄,熟悉“制作和調用DLL”的一般流程,具體的理解先不考慮。
靜態調用(同時需要.h頭文件、LIB和DLL文件,缺一不可),靜態調用是一種顯式的調用方式,即在編程的時候便知道了被調用的DLL中的接口函數,在編譯鏈接的時候將DLL與工程生成的exe相關聯。
動態調用(僅需要DLL,不需要頭文件和LIB),動態調用是一種隱式的調用方式,即程序運行過程中裝載DLL,然后獲取指定函數名稱的接口函數,然后再調用之。
參照@https://blog.csdn.net/fightingforcv/article/details/41773391,在VS2010中 使用C++創建和使用DLL。嘗試了一下,創建DLL工程和調用DLL工程:(1)在同一個VS工程下;(2)在兩個不同的工程下,兩個都好用,區別在哪兒,現在還不太清楚。
重點:
(1)創建DLL工程下生成的 .lib 和 .dll 復制到調用DLL工程下;
(2)在同一個VS工程下,創建DLL工程和調用DLL工程,注意“調用DLL工程”編譯時,工程右鍵設置“設為啟動項”之后再進行編譯。
知識點:
(1)函數導出方式:
在DLL的創建過程中,一種方式是_declspec( dllexport )方式導出函數的,另一種導出函數的方式是使用導出文件(.def)。
可以在DLL工程中,添加一個Module-Definition File(.def)文件。.def文件為鏈接器提供了有關被鏈接器程序的導出、屬性及其它方面的信息。
注,Module-Definition File(.def)文件的格式如下:
LIBRARY語句說明.def文件對應的DLL;
EXPORTS語句后列出要導出函數的名稱。可以在.def文件中的導出函數名后加@n,表示要導出函數的序號為n(在進行函數調用時,這個序號有一定的作用)。
(2)使用DLL:
當我們的程序需要使用DLL時,就需要去加載DLL,在程序中加載DLL有兩種方法,分別為“加載時動態鏈接”和“運行時動態鏈接”。
在“加載時動態鏈接”中,應用程序像調用本地函數一樣對導出的DLL函數進行顯示調用。要使用加載時動態鏈接,需要在編譯和鏈接應用程序時提供頭文件和導入庫文件(.lib)。當這樣做的時候,鏈接器將向系統提供加載DLL所需的信息,並在加載時解析導出的DLL函數的位置;
在“運行時動態鏈接”中,應用程序調用LoadLibrary函數或LoadLibraryEx函數以在運行時加載DLL。成功加載DLL后,可以使用GetProcAddress函數獲得要調用的導出的DLL函數的地址。在使用運行時動態鏈接時,不需要使用導入庫文件。
PS 過程中也遇到了很多問題,幾個重要問題與解決方式詳見《問題》中的簡單記錄。
***************************************************************************************************
**********************************************************************************************************************