動態呼叫非託管MFC動態鏈結庫中函式的方法封裝。

2021-03-31 08:57:00 字數 1464 閱讀 9465

這是一段封裝了乙個呼叫非託管mfc編寫的動態鏈結庫函式的方法,首先要向**中加入以下連個命名空間以使用反射和元資料的呼叫。

using system.reflection.emit;

using system.reflection;

假設我們有乙個mfc動態鏈結庫(getmyversion.dll),其中有這樣乙個函式int getdllversion(char* verstr),該函式返回乙個函式版本字串。

方法將建立乙個動態的物件集。用definepinvokemethod方法建立乙個函式,我們將用被建立的函式去訪問我們需要的dll函式。為全域性函式取名為createglobalfunctions。用先前建立的getmethod函式呼叫dll中的函式。

publicobject dynamicdllfunctioninvoke( string dllpath, string entrypoint )

;

object parametervalues = ;

string entrypoint = entrypoint;

// 建立動態**集和動態呼叫模組

assemblyname a**name = new assemblyname();

a**name.name = "tempdll";

assemblybuilder dynamica** =

assemblybuilderaccess.run);

modulebuilder dynamicmod =

dynamica**.definedynamicmodule("tempmodule");

// 使用輸入資料動態構建全域性呼叫簽名

methodbuilder dynamicmethod = dynamicmod.definepinvokemethod(

entrypoint, dllpath, methodattributes.static | methodattributes.public

| methodattributes.pinvokeimpl , callingconventions.standard,

returntype, parametertypes, callingconvention.winapi,

charset.ansi);

// 全域性方法構建

dynamicmod.createglobalfunctions();

// 得到呼叫方法的呼叫資訊

methodinfo mi = dynamicmod.getmethod(entrypoint);

// 呼叫靜態方法並返回乙個object型物件

object retval = mi.invoke(null, parametervalues);

messagebox.show(system.text.asciiencoding.ascii.getstring(verstr));

return retval;

}

c 如何呼叫動態鏈結庫(託管)

net平台上,呼叫dll檔案有2種含義 1 呼叫託管dll,即使用.net平台開發的dll,屬於託管 2 呼叫非託管dll,即傳統的dll,一般是c vb,delphi等等開發出來的,屬於非託管 對於託管呼叫,舉例如下 比如一段座標轉換的程式,在名字空間mydll裡,有三個類 在函式類裡有兩個方法。...

MFC 動態鏈結庫的生成呼叫。

1.新建mfc dll程式。2.在專案中新增.cpp檔案 名字隨意。我的是txt 在txt.cpp中寫入 extern c declspec dllexport void button1 void 3.右擊txt.cpp點編譯,編譯成功就行。4.在自己的dll專案debug資料夾中找到txtdll....

MFC動態鏈結庫和WIN32動態鏈結庫

1 dll的構成 每個應用程式都有乙個入口函式winmain,而每個dll也有乙個入口函式dllmain。dll跟應用程式一樣都含有資源 資料段和 段。dll跟應用程式的差別主要是dll有符號輸入表和符號輸出表,以方便應用程式呼叫dll中的函式。因為dll是由應用程式載入的,所以它本身沒有虛擬的記憶...