簡體   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