![](/img/trans.png)
[英]How to dynamically load a C# dll from a C++ DLL
[英]How to delete a C# dll from a C++ dll
我创建了包含RSA算法的ac#dll,并在我的c ++ dll中加载了相同的dll。 当我试图删除c#dll后,它的使用系统抛出了c#dll已经在使用的异常,尽管我已经释放了所有的接口指针。 以下是我的代码:
在C ++中
ICryptInterfaceRSA *crpt = null;
coinitialize(null);
hresult hr = ::cocreateinstance(guid1,guid2,<reinterpret cast>(void**)&crypt);
//doing my encryption and decryption
crpt->Release();
coUninitialize();
//Problem occurs at below mentioned code
BOOL b = DeleteFile("C# dll file path");
DWORD dw = GetLasterror();
dw被赋予5(文件已被使用)
如何克服这个问题。 如果无法删除那么解决方法是什么。 请帮帮我。 提前致谢。
一些可能的检查/答案:
如果它不需要“立即删除”,你可以使用MoveFileEx ,在下次重启时删除(如果destination为NULL,则删除,而不是移动)。
使用Process Explorer确定哪些句柄仍处于打开状态,并编写代码以显式关闭它们。 您还可以使用Process Explorer的UI关闭句柄,并确认可以在强制关闭DLL后删除DLL(当然,您的应用可能会崩溃)。
尝试使用GetModuleHandle(“dllname.dll”),查看DLL是否仍在您的进程中加载(如果没有,则返回NULL)并在句柄上尝试FreeLibrary(如果仍然加载)。
如果C#代码是你的,你可以使用C ++ / CLI和普通的“导出函数”代替COM吗? 您可以通过这种方式更好地控制加载/释放。
你的设计在某些方面存在缺陷,如果可能的话我尽我所能改变它。 我见过程序(主要是反病毒程序),它们会在访问后保持文件打开相当长的时间。 根据在加载文件并释放文件后立即删除文件的能力,听起来不健全。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.