在c#中可以通過assembly來動(dòng)態(tài)加載dll,然后由它創(chuàng)建類型,接著通過類型的invokemember方法來調(diào)用dll中類的方法以及屬性。
為了方便說明一下的方法,先說明一下dll的代碼,大致如下:
using system;
namespace clstestdll
{
/// <summary>
/// summary description for testdll.
/// </summary>
public class testdll
{
private string strname;
public testdll()
{
//
// todo: add constructor logic here
//
strname = "";
}
public string getvalue( int ncount )
{
return string.format( "count is {0}!", ncount );
}
public static string getnewvalue( int ncount )
{
return string.format( "new count is {0}!", ncount );
}
public string name
{
get{ return strname;}
set{ strname = value;}
}
}
}
大致的步驟如下:
首先加載dll,具體如下:
// load assembly from dll file
assembly assembly = assembly.loadfrom( "clstestdll.dll");
其次,用加載的assembly來定義指定的類型,例如:
// create new type
type t = assembly.gettype( "clstestdll.testdll");
然后就可以通過新建的類型來調(diào)用類的方法。
如果是類的靜態(tài)方法,可以直接調(diào)用,如:
// call static member function by name
string strreturn = (string) t.invokemember("getnewvalue",
bindingflags.declaredonly |
bindingflags.public |
bindingflags.static | bindingflags.invokemethod,
null,
null,
new object[]{ 12 } );
如果是類的非靜態(tài)方法或?qū)傩裕瑒t需要通過類型,先生成類的對象,如:
// 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”對象來進(jìn)行調(diào)用了,如:
// call member function by name
strreturn = (string) t.invokemember("getvalue",
bindingflags.declaredonly |
bindingflags.public | bindingflags.nonpublic |
bindingflags.instance | bindingflags.invokemethod,
null,
obj,
new object[]{ 12 } );
// set class property
t.invokemember("name",
bindingflags.declaredonly |
bindingflags.public | bindingflags.nonpublic |
bindingflags.instance | bindingflags.setproperty,
null,
obj,
new object[] {"test"} );
// get class property
strreturn = (string) t.invokemember("name",
bindingflags.declaredonly |
bindingflags.public | bindingflags.nonpublic |
bindingflags.instance | bindingflags.getproperty,
null,
obj,
null);
新聞熱點(diǎn)
疑難解答
圖片精選