這是一段封裝了乙個呼叫非託管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是由應用程式載入的,所以它本身沒有虛擬的記憶...