反射動態呼叫DLL類庫測試

2021-09-05 20:54:30 字數 1247 閱讀 2647

定義:

可以在執行時獲得.net中每乙個型別(包括類、結構、委託、介面和列舉等)的成員,包括方法、屬性、事件,以及建構函式等。還可以獲得每個成員的名稱、限定符和引數等。有了反射,即可對每乙個型別瞭如指掌。如果獲得了建構函式的資訊,即可直接建立物件,即使這個物件的型別在編譯時還不知道

同乙個功能不用反射同樣能實現,那為什麼一定要用反射,一直不太明白他的作用,但c#裡推崇較甚,今天到網上查了段反射動態呼叫dll類庫的**,除錯了下通過了

**如下:

system.reflection.assembly asm = system.reflection.assembly.loadfile("d:\\projecttest\\classtest\\classtest\\bin\\debug\\classtest.dll");  //通過路徑載入動態庫

type t = asm.gettype("classtest.class1");  //得到class

system.reflection.constructorinfo conn = t.getconstructor(new type[0]); //獲取沒有引數的建構函式 

object a1 = conn.invoke(new object[0]);  //呼叫沒有引數的建構函式invoke,返回object它其是a類

system.reflection.methodinfo meth = t.getmethod("getstr", new type ); //獲取引數型別為string,函式名為getstr的方法

string aa = meth.invoke(a1, new object ).tostring(); //在a1上呼叫getstr方法,引數為"我是中國人"

response.write("值:" + aa);    //輸入值    正確結果為「我是中國人」

補充一、通過load反射建立例項:

system.reflection.assembly ass = system.reflection.assembly.load("xys.mets.model");

xys.mets.model.duty_info info = (xys.mets.model.duty_info )ass.createinstance

("xys.mets.model.duty_info");

info.dutyname = "aaa";

response.write(info.dutyname);

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

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

python呼叫dll動態庫

python呼叫動態庫有兩種型別,主要看dll的匯出函式的呼叫約定 stdll和 cdecl 對應的動態庫的呼叫方式為 ctypes.cdll.loadlibrary test.dll 對應 cdecl呼叫方式 ctypes.windll.loadlibrary test.dll 對應 stdll呼...

利用反射動態呼叫類成員

使用反射動態呼叫類成員,需要type類的乙個方法 invokemember。對該方法的宣告如下 摘抄於msdn public object invokemember string name,bindingflags invokeattr,binder binder,object target,obj...