windows下的dll庫

extern "C" --------------在C++編譯器中使用

作用是告訴C++編譯器不要修改函數、變量的名稱,因此通常用在dll文件編譯參數中,使dll文件多次編譯時,輸出的函數、變量名稱保持不變。相反的,__stdcall修飾函數時,編譯後的函數名將發生變化,如__FUNCXX@112

__declspec(dllexport)  聲明函數、變量 ----------------告訴編譯器該函數、變量是輸出給其他代碼調用的。

__declspec(dllimport) 聲明函數、變量--------------告訴編譯器該函數、變量是由其他dll模塊定義的,不能僅僅使用extern。

隱式鏈接dll:

應用程序中不需指明dll文件的實際存儲路徑,可以直接使用相關函數。

產生dll時同步生成導入庫lib文件;

編譯exe時,需要h頭文件、lib導入庫文件(#pragma comment(lib, "..\\XXX.lib"));

執行exe時,需要dll動態庫文件。

顯式鏈接的dll:

不生成導入庫,應用程序在使用dll時需要指明庫文件名稱、路徑;

調用LoadLibary調入DLL文件,然後再手工GetProcAddress獲得對應函數。

windows導入庫(.lib文件)和linux下的靜態庫(.a文件)的區別:

靜態庫本身就包含了實際執行代碼、符號表等等,而對於導入庫而言,其實際的執行代碼位於動態庫中,導入庫只包含了地址符號表等,幫助程序找到對應函數的一些基本地址信息。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章