C 通過反射呼叫DLL內部函式

2021-10-02 19:41:48 字數 1987 閱讀 2288

// 依賴

using system.reflection;

**

//載入dll檔案

assembly assembly = assembly.

loadfile

(@"dll的路徑");

//獲取型別,引數(命名空間.類名)

type type = assembly.

gettype

("namespace.classname");

//建立該物件的例項,object型別,引數(命名空間.類)

object instance = assembly.

createinstance

("namespace.classname");

//設定要呼叫方法中的引數型別,type型別,如果有多個引數課追加

//假設要呼叫的方法只有乙個string型別的引數

type[

] paramstype =

newtype[1

];paramstype[0]

= type.

gettype

("system.string");

//設定要呼叫方法方法中的引數值,同上可追加

object[

] paramsobj =

newobject[1

];paramsobj[0]

="引數值"

;//執行showpara方法,並接收返回值

object returnvalue = type.

getmethod

("showpara"

, paramstype)

.invoke

(instance, paramsobj)

;

對於帶引數的且沒有無參建構函式的,使用上述方法構造例項會出錯,可以使用system.activator的createinstance(type, object)來構造例項:

//獲取型別,引數(命名空間.類)

type type = assembly.

gettype

("namespace.classname");

//構造函式引數列表

object

parames =

newobject

;//建立該物件的例項,object型別,引數(type, object)

object instance = activator.

createinstance

(type, parames)

;

靜態方法的呼叫: 在getmethod()時新增引數即可。

bindingflags.nonpublic | bindingflags.static

eg:

object returnvalue = type.

getmethod

("funname"

, bindingflags.nonpublic | bindingflags.static)

.invoke

(instance,

null

);

fieldinfo[

] allfields = type.

getfields

(bindingflags.instance | bindingflags.nonpublic | bindingflags.public)

;dictionary<

string

,object

> allfieldsmap =

newdictionary

<

string

,object

>()

;foreach

(fieldinfo f in allfields)

1

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

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

C 通過反射呼叫方法

用反射呼叫方法 常用於軟體架構中 假如你定義好了基類和介面,其他人使用基類派生出新的方法,你在不知道有多少類會使用此基類派生,但是你需要呼叫所有的派生類的方法時,就可以這樣,直接遍歷相同命名空間中的由基類派生的所有類,然後例項化所有類,呼叫所有方法 using system using system...

C 反射呼叫dll中的方法

反射提供描述程式集 模組和型別的物件 type 型別 可以使用反射動態地建立型別的例項,將型別繫結到現有物件,或從現有物件中獲取型別,然後呼叫其方法或訪問器字段和屬性。如果 中使用了特性,可以利用反射來訪問它們 namespace assembly name public string assemb...