VS---《在VS2010中 使用C++創建和使用DLL》(001)


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 過程中也遇到了很多問題,幾個重要問題與解決方式詳見《問題》中的簡單記錄。

***************************************************************************************************

**********************************************************************************************************************

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM