如何動態呼叫DLL中類的方法以及屬性

2021-06-29 15:09:32 字數 2281 閱讀 8422

在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);

//set class property

system.reflection.propertyinfo fi = t.getproperty("name");//獲取類中的屬性,用這行**

fi.setvalue(obj, "新的名稱", null);

如何動態呼叫DLL中類的方法以及屬性

來源 http blog.csdn.net knight94 archive 2006 04 10 657527.aspx 在c 中可以通過assembly來動態載入dll,然後由它建立型別,接著通過型別的invokemember方法來呼叫dll中類的方法以及屬性。為了方便說明一下的方法,先說明一下...

如何動態呼叫DLL中類的方法以及屬性

c 中可以通過assembly來動態載入dll,然後由它建立型別,接著通過型別的invokemember方法來呼叫dll中類的方法以及屬性。為了方便說明一下的方法,先說明一下dll的 大致如下 using system namespace clstestdll public string getva...

C 通過反射類動態呼叫DLL方法

個人覺得 反射 就是能按照規定 微軟.net 動態訪問特定程式集中物件的工具.網上找的 例子 使用反射方 using system using system.collections.generic using system.linq using system.text using system.re...