利用反射動態呼叫C 嵌入到資源的託管DLL

2021-08-08 20:52:54 字數 1239 閱讀 3110

以前寫了一篇部落格《c#嵌入dll到資源釋放的問題》講到了dll檔案嵌入到資源後,程式執行時自動釋放並實現**呼叫的問題。很多讀者都問到了同乙個問題:文章針對的是非託管的win 32 dll,那麼託管的dll怎麼嵌入並釋放呢?這篇文章就來聊一下這個話題。

由於託管應用程式在啟動時就需要載入全部使用到的託管dll,所以採用嵌入win32 dll到資源然後再釋放的方式是不可行的。有一種思路是在生成exe後,把需要呼叫的dll與exe合併成乙個新的exe,比如imerge等工具就可以實現這一過程(其實我也一直這麼幹)。但是今天我要講的是一種類似嵌入非託管dll的方式,利用反射直接通過**來實現動態呼叫。

需要呼叫的託管math.dll主要**:

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace math}}

生成math.dll後,在需要呼叫的c#程式中新增對math.dll的引用:

具體嵌入步驟:

將引用的math修改屬性:複製本地->false。

將math.dll檔案加入到呼叫程式功能的資源中,注意修改屬性:生成操作->嵌入的資源。

直接上**:

using system;

using system.collections.generic;

using system.linq;

using system.reflection;

using system.windows.forms;

using system.io;

namespace demo

static assembly currentdomain_assemblyresolve(object sender, eventargs e)}}

}

我們現在就可以刪除math.dll檔案,直接執行生成的exe程式,過程就這麼簡單。

(C )利用反射動態呼叫類成員

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

C 利用反射動態呼叫類成員

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

(C )利用反射動態呼叫類成員

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