如何从c++ dll中删除c# dll
How to delete a C# dll from a C++ dll
我已经创建了一个包含RSA算法的c# 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,删除在下次重启(如果目的地是NULL,它删除,而不是移动)。
使用进程资源管理器找出仍然打开的句柄,并编写代码显式地关闭它们。你也可以使用进程资源管理器的UI关闭句柄,并确认你可以在强制关闭它们后删除DLL(当然你的应用程序可能会崩溃)。
尝试GetModuleHandle("dllname.dll"),看看DLL是否仍然在你的进程中加载(如果不是返回NULL),并尝试FreeLibrary句柄如果仍然加载
如果c#代码是你的,你可以使用c++/CLI和正常的"导出函数"代替COM吗?通过这种方式,您可以更好地控制加载/释放。
你的设计在某些方面是有缺陷的,如果可能的话,我会尽我所能去改变它。我曾见过一些程序(主要是防病毒程序)在用户访问文件后将其打开一段时间。根据加载和释放文件后立即删除文件的能力,听起来不太可靠。相关文章:
- 从DLL中删除类的实例
- 来自C#的mingw DLL:为什么我必须覆盖新建/删除?
- 如果删除未使用的REF类,DLL将无法加载
- VS C DLL-标量删除驱动器
- 从 /MD Exe 文件中删除 /MDd 的 DLL 内存会导致堆损坏
- 使用抽象接口C++ dll 边界 -标头中的智能指针>?叫删除?
- 如何安全地删除ATL DLL中的std ::线程
- 使用 DEF 文件删除 dll 导出的名称
- 删除/编辑 ATL COM DLL 属性/方法
- 如何正确删除从另一个DLL接收的派生对象
- 导出 DLL - 删除头文件
- 在卸载 DLL 期间删除静态对象时退出线程会导致死锁
- Visual Studio 需要删除/添加对新重新构建的 dll 的引用
- 从 DLL 中删除指针
- 如何从预编译的dll中删除清单
- 如何从c++ dll中删除c# dll
- 在c++ dll中删除指针时出错
- 为每次重新编译删除和重新复制.dll的方法
- 使用VS2015 Express,删除VS2013社区,无法运行"MSVCP120d.dll missing"
- 我是否可以以可以在加载时删除 dll 的方式加载它?