Windows DLL呼叫例項

2022-09-14 08:36:12 字數 1784 閱讀 7800

dll全稱dynamic link library,是微軟定義的動態鏈結庫型別。動態鏈結庫的好處不必多說。那麼在windows下如何使用dll呢?dll的使用有2種方式:第一種稱之為」顯式鏈結」,只需提供dll檔案和知曉函式名即可;第二種稱之為「隱式鏈結」,需要提供lib,標頭檔案和dll,這種方式比較正規。首先,我們來製作乙個dll檔案。

分別建立mydllbase.h ,mydll.h和mydll.cpp檔案。檔案內容如下:

mydllbase.h:

#ifndef mydllbase_h

#define mydllbase_h

class

mydllbase

;

virtual

int add(int a, int b) = 0;};

#endif

mydll.h:

#ifndef mydll_h

#define mydll_h

class __declspec( dllexport ) mymath: public

mydllbase

int add(int a, int

b);};

#endif

mydll.cpp:

#include "

mydll.h

"extern"c

" __declspec(dllexport) mymath*getinstance()

int mymath::add(int a, int

b)

如何匯出函式,classes,詳見:

編譯後生成:

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...