为什么dll还没c 卸载dll就调用DLL

易语言DLL自卸载源码例程程序置入汇编代码,调用API函数实现DLL自行卸载功能。
易语言源码例程属于易语言高级教程。
点评:易语言DLL自卸载源码用汇编代码取DLL本身取模块句柄。
下载地址 (请使用浏览器下载)
CopyRight & &版权所有本帖子已过去太久远了,不再提供回复功能。今天看啥 热点:
c#动态加载卸载DLL的方法,这篇文章介绍了c#动态加载卸载DLL的方法,有需要的朋友可以参考一下
c#中通过反射可以方便的动态加载dll程序集,但是如果你需要对dll进行更新,却发现.net类库没有提供卸载dll程序集的方法。在.net 中,加入了应用程序域的概念,应用程序域是可以卸载的。也就是说,如果需要对动态加载的dll程序集进行更新,可以通过以下方法解决:
新建一个应用程序域,在该应用程序域中动态加载DLL,然后可以卸载掉该应用程序域。该应用程序域被卸载的时候,相关资源也会被回收。
要想这样实现,就要让你程序的currentDomain和新建的newDomain之间进行通信,穿过应用程序域的边界。从网上找到了某大牛的解决方法,抄下来留给自己看吧:&
using System.Collections.G
using System.T
using System.T
using System.R
namespace UnloadDll
class Program
static void Main(string[] args)
string callingDomainName = AppDomain.CurrentDomain.FriendlyN//Thread.GetDomain().FriendlyN
Console.WriteLine(callingDomainName);
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;
Console.ReadLine();
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;
} /* 何问起
1. 要想让一个对象能够穿过AppDomain边界,必须要继承MarshalByRefObject类,否则无法被其他AppDomain使用。
2. 每个线程都有一个默认的AppDomain,可以通过Thread.GetDomain()来得到
/h/bjaf/scjyuanma.htm
/roucheng/p/netkuangjia.html
相关搜索:
相关阅读:
相关频道:
&&&&&&&&&&&&&&&&
C#教程最近更新

我要回帖

更多关于 360卸载7z.dll损坏 的文章

 

随机推荐