繁体   English   中英

如何从C ++ DLL中删除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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM