dll全稱dynamic link library,是微軟定義的動態鏈結庫型別。動態鏈結庫的好處不必多說。那麼在windows下如何使用dll呢?dll的使用有2種方式:第一種稱之為」顯式鏈結」,只需提供dll檔案和知曉函式名即可;第二種稱之為「隱式鏈結」,需要提供lib,標頭檔案和dll,這種方式比較正規。首先,我們來製作乙個dll檔案。
分別建立mydllbase.h ,mydll.h和mydll.cpp檔案。檔案內容如下:
mydllbase.h:
#ifndef mydllbase_hmydll.h:#define mydllbase_h
class
mydllbase
;
virtual
int add(int a, int b) = 0;};
#endif
#ifndef mydll_hmydll.cpp:#define mydll_h
class __declspec( dllexport ) mymath: public
mydllbase
int add(int a, int
b);};
#endif
#include "如何匯出函式,classes,詳見:mydll.h
"extern"c
" __declspec(dllexport) mymath*getinstance()
int mymath::add(int a, int
b)
編譯後生成:
mydll.dll mydll.lib 檔案。
只要新增 mydllbase.h 標頭檔案。
main.cpp:
#include #include執行結果:#include
#include
"mydllbase.h
"using
namespace
std;
typedef mydllbase* (*getinstance)();
intmain()
else
func = (getinstance)getprocaddress(hinstlibrary, "
getinstance");
if (func ==null)
else
class mydllbase* m =func();
if (m !=null)
cout
<
sum:
"freelibrary(hinstlibrary);
return0;
}
顯然,在顯式鏈結中,我們不能直接呼叫class,需要通過乙個全域性getinstance函式,隱式地建立class的例項,同時需要建立乙個基類,將所有成員函式命名成純虛函式,然後讓class繼承基類函式,來達到捕獲class例項的目的。這是多麼麻煩啊!!!
main.cpp:
#include #include執行結果:#include
"mydll.h
"using
namespace
std;
#pragma comment(lib, "mydll.lib")
intmain()
非常簡單!通過#pragma comment()巨集將lib引入lib庫,可以像本地class一樣呼叫dll的class。
C 實現動態呼叫Windows DLL
部分 來自於網路 廢話不多說,上 呼叫方法 object obj windllinvoke kernel32.dll beep newobject typeof void 函式 1 system.runtime.interopservices.dllimport kernel32 2private ...
Windows dll搜尋順序
不附加任何其他條件時,標準的dll搜尋順序如下 1.應用程式的載入目錄 d test 2.當前目錄 預設為程式載入目錄,可以通過setcurrentdirectory修改,通過getcurrentdirectory獲取 3.系統目錄 32位系統下通常是,c windows system32,可以通過...
Windows DLL資料整理
1.使用visual c 6.0建立dll 2.函式的呼叫規則 cdecl,stdcall,fastcall,pascal 要點 1.如果你的程式中沒有涉及可變引數,最好使用 stdcall關鍵字 2.cdecl,stdcall是宣告的函式呼叫協議.主要是傳參和彈棧方面的不同.一般c 用的是 cde...