來源:http://blog.csdn.net/knight94/archive/2006/04/10/657527.aspx
在c#中可以通過assembly來動態載入dll,然後由它建立型別,接著通過型別的invokemember方法來呼叫dll中類的方法以及屬性。
為了方便說明一下的方法,先說明一下dll的**,大致如下:
using
system;
namespace
clstestdll
public
string getvalue( int ncount )
!", ncount ); }
public
static
string getnewvalue( int ncount )
!", ncount ); }
public
string name
set }
} }
大致的步驟如下:
首先載入dll,具體如下:
// load assembly from dll file
assembly assembly = assembly.loadfrom( "clstestdll.dll");
其次,用載入的assembly來定義指定的型別,例如:
// create new type
type t = assembly.gettype( "clstestdll.testdll");
然後就可以通過新建的型別來呼叫類的方法。
如果是類的靜態方法,可以直接呼叫,如:
// call static member function by name
string strreturn = (string) t.invokemember("getnewvalue",
bindingflags.declaredonly |
bindingflags.public |
bindingflags.static | bindingflags.invokemethod,
null,
null,
newobject );
如果是類的非靜態方法或屬性,則需要通過型別,先生成類的物件,如:
// create new object of specific class name
object obj = t.invokemember(
null,
bindingflags.declaredonly |
bindingflags.public | bindingflags.nonpublic |
bindingflags.instance | bindingflags.createinstance,
null,
null,
null );
接著,就可以通過「obj」物件來進行呼叫了,如:
// call member function by name
strreturn = (string) t.invokemember("getvalue",
bindingflags.declaredonly |
bindingflags.public | bindingflags.nonpublic |
bindingflags.instance | bindingflags.invokemethod,
null,
obj,
newobject );
// set class property
t.invokemember("name",
bindingflags.declaredonly |
bindingflags.public | bindingflags.nonpublic |
bindingflags.instance | bindingflags.setproperty,
null,
obj,
new object );
// get class property
strreturn = (string) t.invokemember("name",
bindingflags.declaredonly |
bindingflags.public | bindingflags.nonpublic |
bindingflags.instance | bindingflags.getproperty,
null,
obj,
null);
如何動態呼叫DLL中類的方法以及屬性
c 中可以通過assembly來動態載入dll,然後由它建立型別,接著通過型別的invokemember方法來呼叫dll中類的方法以及屬性。為了方便說明一下的方法,先說明一下dll的 大致如下 using system namespace clstestdll public string getva...
如何動態呼叫DLL中類的方法以及屬性
在c 中可以通過assembly來動態載入dll,然後由它建立型別,接著通過型別的invokemember方法來呼叫dll中類的方法以及屬性。為了方便說明一下的方法,先說明一下dll的 大致如下 using system namespace clstestdll public string getv...
C 通過反射類動態呼叫DLL方法
個人覺得 反射 就是能按照規定 微軟.net 動態訪問特定程式集中物件的工具.網上找的 例子 使用反射方 using system using system.collections.generic using system.linq using system.text using system.re...