先轉過來 下來再看
(一)寫addtest.dll
1.新建乙個project->win32 dynamic link library,命名為addtest, finish.
2.新建乙個c/c++ head file,命名為summath.h,其**為:
extern "c" __declspec(dllexport)
int fun(int x1,int x2,int x3);
3.新建乙個summath.cpp,其**為:
#i nclude "addmath.h"
extern "c" __declspec(dllexport) int fun(int x1,int x2,int x3)
4.儲存,build,這樣我們就在addtest工程目錄下的debug檔案中得到addtest.dll檔案。
分析上面的程式我們可以看出,對dll的呼叫分為一下幾步:
首先,語句typedef int ( * lpaddfun)(int,int)定義了乙個與add函式接受引數型別和返回值均相同的函式指標型別。隨後,在main函式中定義了lpaddfun的例項addfun;
其次,在函式main中定義了乙個dll hinstance控制代碼例項hdll,通過win32 api函式loadlibrary動態載入了dll模組並將dll模組控制代碼賦給了hdll;
再次,在函式main中通過win32 api函式getprocaddress得到了所載入dll模組中函式add的位址並賦給了addfun。經由函式指標addfun進行了對dll中add函式的呼叫;
最後,應用工程使用完dll後,在函式main中通過win32 api函式freelibrary釋放了已經載入的dll模組。
在上面的例子中我們看到了由系統api提供的三位一體「dll載入-dll函式位址獲取-dll釋放」方式,這種呼叫方式稱為dll的動態呼叫。
動態呼叫方式的特點是完全由程式設計者用 api 函式載入和解除安裝 dll,程式設計師可以決定 dll 檔案何時載入或不載入,顯式鏈結在執行時決定載入哪個 dll 檔案。
同樣,還存在靜態呼叫的方式。靜態呼叫方式的特點是由編譯系統完成對dll的載入和應用程式結束時 dll 的解除安裝。當呼叫某dll的應用程式結束時,若系統中還有其它程式使用該 dll,則windows對dll的應用記錄減1,直到所有使用該dll的程式都結束時才釋放它。靜態呼叫方式簡單實用,但不如動態呼叫方式靈活。
下面我們來看看靜態呼叫的例子,將編譯dlltest工程所生成的.lib和.dll檔案拷入dllcall工程所在的路徑
(二)在另外乙個console程式中呼叫addtest.dll
2.新建乙個test.cpp檔案。其**為:
#i nclude
#i nclude
//---------1、動態呼叫類庫--------------------------------------------
typedef int (_cdecl *dlladdmath)(int,int,int);
//宣告乙個函式指標,可以指向dll中的函式
//2、靜態呼叫類庫
#pragma comment(lib,"addtest.lib")
extern "c"__declspec(dllimport) int fun1(int x,int y);
int main()
這個時候儲存,並執行,就會看到結果為:
測試vc中使用dll的結果為:6
(三)在c#中呼叫
在引用中新增addtest.dll
using addtest;
private void button2_click(object sender, eventargs e)
public static class addtest
DELPHI呼叫VC寫的DLL經驗
由於專案的需要,必須使用delphi呼叫vc編寫的dll,而我是編寫dll的。這裡總結幾個出現過的問題,以後再遇到就會用了。一 需要在每乙個輸出的函式開始新增上 afx manage state afxgetstaticmodulestate 這是用來實現dll資源的切換!讓我們來看看,這句 到底做...
VC動態呼叫DLL
1.生成dll extern c declspec dllexport char sendmess char buffer,int length 呼叫的時候要先給buffer分配記憶體 new 不然會出10014的錯誤.10014 系統檢測到在乙個呼叫中嘗試使用指標引數時的無效指標位址。2.動態呼叫...
利用vc呼叫dll
一時興起,研究下關於dll的呼叫,算是作為我首次發表文章啦,怎麼說也是我的處子作啊 好吧入正題啦 關於dll的呼叫,查了下資料,有兩種 一 靜態呼叫 二 動態呼叫,下面是分別的呼叫方法 一 靜態呼叫 3 用vc開啟mytest工程,選中工程,然後選擇vc選單下的project settings 二 ...