以前寫了一篇部落格《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...