您好,登錄后才能下訂單哦!
這篇文章主要講解了“VC中DLL的創建及調用方法分享”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“VC中DLL的創建及調用方法分享”吧!
方法一:
VC中DLL的創建及調用方法
此中只有實際才操作,而無相關理論
² DLL的創建
首先,用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() { //code…… }
dllexport表示這個函數是由外部調用的。
由于是否帶參數,要影響到外部調用的方式,因此,我們再聲明一個帶參數的函數:
extern “c” __declspec(dllexport) void went(CString str) { //code…… }
OK,下面編譯連接形成mydll.dll文件。
² 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聲明變量既可調用,如下:
MYWENT myproc; 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的創建及調用方法
New->MfcWiazard.dll 一路下去,就會生成一個了(略)。
感謝各位的閱讀,以上就是“VC中DLL的創建及調用方法分享”的內容了,經過本文的學習后,相信大家對VC中DLL的創建及調用方法分享這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。