VC中DLL的建立及呼叫方法

2021-06-15 20:22:54 字數 2000 閱讀 4763

此中只有實際才操作,而無相關理論

首先,用

vc整合開發介面中的「新建」,新建乙個專案。無論是

vc6.0

還是vc.net

,都有建立

dll專案的選項。只不過有些稍有不同,例如

vc.net

中就有isapi dll

,擴充套件儲存過程

dll等,這些都不在討論的範圍。例如我們建立了乙個用靜態連線

mfc庫的

dll專案,名稱為

mydll。

然後,編輯

mydll.cpp

檔案,在其中加入我們自己的函式

void go()

。注意,不需要在

mydll.h

中宣告它,而需要將函式頭變成如下樣子:

extern 「c」 _declspec(dllexport) void go()

dllexport

表示這個函式是由外部呼叫的。

由於是否帶引數,要影響到外部呼叫的方式,因此,我們再宣告乙個帶引數的函式:

extern 「c」 _declspec(dllexport) void went(cstring str)

ok,下面編譯連線形成

mydll.dll

檔案。

好,下面我們就用

vc寫個程式呼叫它。在呼叫的函式中,首先要獲得

dll的控制代碼,有如下語句:

hinstance     dllinstance;

dllinstance=::loadlibrary(strdllurl);

if(dllinstance==null)

afxmessagebox("can't open dll file");

其中strdllurl

是mydll.dll

路徑的字串,這樣程式才能找到它。

::loadlibrary

獲得引數標識的

dll檔案的控制代碼。

獲得控制代碼後,下面要獲得函式位址以便執行它。有如下語句:

farproc  proc;

proc=getprocaddress(dllinstance,"go");

if(proc==null)

afxmessagebox("can't find function");

else

proc();

farproc

是乙個遠端過程指標,通過

getprocaddress

獲得函式的位址。它的兩個引數就是

dll檔案控制代碼和函式的名字了。 然後

farproc

就可以和

go一樣的使用了,它就是go,

go就是它。

而對於帶引數的

dll中的函式,呼叫方法有所不同。因為對函式的呼叫是通過對它位址的引用進行的,這樣,傳入引數對不對,在函式呼叫程式的編譯和聯接過程中,無法知道其正確性。因此,要在呼叫程式中對dll中帶引數的函式做個宣告,如

mydll

中的went

,我們要做個宣告如下:

typedef void (far _cdecl *mywent)(cstring);

然後以型別

mywent

宣告變數既可呼叫,如下:

mywentmyproc;

myproc=(mywent)getprocaddress(dllinstance,"go");

if(myproc==null)

afxmessagebox("can't find function");

else

myproc (「o-----yeah---------」);

注意宣告的時候呢,由於

dll中

went

的定義為

c語言呼叫規範,因此

mywent

前一定要用

_cdecl

,而vc中常用的

_stdcall

是pascal

呼叫規範,不可以的。一定要注意。

VC中DLL的建立及呼叫方法

dll的建立 首先,用vc整合開發介面中的 新建 新建乙個專案。無論是vc6.0還是vc.net,都有建立dll專案的選項。只不過有些稍有不同,例如vc.net中就有isapi dll,擴充套件儲存過程dll等,這些都不在討論的範圍。例如我們建立了乙個用靜態連線mfc庫的dll專案,名稱為mydll...

vc 建立dll檔案以及dll呼叫

一 生成dll 1 用vc建立乙個win32dll工程 dlltest,選上 匯出符號 2 在dlltest.cpp中編寫匯出函式fun 這個函式是別的程式要呼叫的函式 int fun int i 3 在dlltest.h中宣告匯出這個函式 declspec dllexport int fun in...

VC中呼叫C 的DLL

在工程編譯時同步互操作註冊生成檔案。在vs中c 專案,選擇專案屬性,開啟屬性配置頁,生成頁中選擇 為com互操作註冊 核取方塊,在編譯時會同時生成tlb檔案 匯入webservices 如果類中未用到webservices,該過程可以省略,直接跳到建立c dll處即可 引用 新增服務引用 高階 新增...