C# load and unload dll
2024-09-08 19:01:45
1. Invoker
Any c# project
Create a new application domain
Create a proxy within the domain
Unload the application domain
AppDomain ad = AppDomain.CreateDomain("DLL Unload test");
ProxyObject obj = ProxyObject)ad.CreateInstanceFromAndUnwrap(@"UnloadDll.exe", "UnloadDll.ProxyObject");
obj.LoadAssembly();
obj.Invoke("TestDll.Class1", "Test", "It's a test");
AppDomain.Unload(ad);
obj = null;
2. Proxy
Implement MarshalByRefObject
Use reflection to load dll
Dll is unloaded when the parent application domain unloading
class ProxyObject : MarshalByRefObject
{
Assembly assembly = null;
public void LoadAssembly()
{
assembly = Assembly.LoadFile(@"TestDLL.dll");
}
public bool Invoke(string fullClassName, string methodName, params Object[] args)
{
if(assembly == null)
return false;
Type tp = assembly.GetType(fullClassName);
if (tp == null)
return false;
MethodInfo method = tp.GetMethod(methodName);
if (method == null)
return false;
Object obj = Activator.CreateInstance(tp);
method.Invoke(obj, args);
return true;
}
}
最新文章
- LeetCode Reorder List
- $(document).click() 在苹果手机上不能正常运行
- owin
- 当powershell遇上mysql引发的血案
- java学习第八天
- mysql InnoDB 索引小记
- Linux软件安装,RPM与YUM
- 进程间通讯之mmap文件共享
- tcp协议栈
- 对vue生命周期/钩子函数的理解
- struts2--Action
- 干货,一文带你超详细了解Session的原理及应用
- DropDownList切换选择,服务器控件Repeater未更新
- json树递归js查询json父子节点
- ES6的新特性(2)——let 与 const 增强变量声明
- 使用Unity5.1进行VR开发的配置(最新的未必是最好的!!!)
- Oracle WebLogic Server 12c 新特性
- Android Google Maps 开始
- Oracle基础 存储过程和事务
- keepalived+redis 高可用redis主从解决方案
热门文章
- rt-thread模糊到清晰系列: irq.c
- windows下dapr的代码调试--非docker部署
- TCP/IP协议(6): DHCP(Dynamic Host Configuration Protocol) 协议 —— 网络地址的分配方式
- 达标式减量策略又一例证(STRASS研究)
- VS Ctrl+D 快速复制上一行
- JS弹窗遮罩 POP
- Solon v2.2.1 发布。向 Graalvm Native 友好靠近
- Spark Streaming实时计算
- vscode注释插件
- C++程序设计实验二 数组、指针与C++标准库