簡體   English   中英

如何在C#中卸載C ++ DLL

[英]How to unload C++ DLL in C#

我在C#ASP.Net Web應用程序中使用DLLImport加載C ++ DLL。 DLL基本上讀取一些CSV文件,然后對其進行處理並創建新文件。

成功運行該方法並再次運行該方法后,我又收到了C ++異常。

我想從網站上卸載C ++ DLL,以便用戶可以重新加載DLL並重新運行該方法。 您知道如何消除此錯誤或擺脫此錯誤消息,以便DLL在運行后可以卸載嗎?

據我所知,尚無法使用C#進行后期綁定。

您可以通過創建一個C ++ DLL並使用它來實現。 假設您對C ++足夠了解,則只需要DLL導出一個函數即可,該函數使用LoadLibrary加載CSV操作DLL,使用GetProcAddress檢索要調用的函數的地址,然后釋放FreeLibrary圖書館。

例如:

extern "C" {
  __declspec(dllexport) bool InvokeMyFunction() {
    HMODULE lib = LoadLibrary("csvlib.dll");
    if (!lib)
      return false;

    void (*func)(int) = (void (*)(int))GetProcAddress(lib, "MyCsvFunc");
    if (!func)
      return false;

    func(5);

    FreeLibrary(lib);

    return true;
  }
}

不過,這並不完全安全。 如果可能的話,最好找出不止一次調用DLL函數的問題,然后加以解決。

如果是您的代碼...為什么不只提供FreeResources函數呢?

另外,修復代碼以使函數可重入也可以。

根據我的信息,非托管DLL始終會加載到主應用程序域中。 如果不是,則可以通過這種方式卸載DLL。

由於這充其量是有問題的,因此我想提出一個不同的解決方案:為什么不編寫一個單獨的命令行程序來執行工作並根據需要運行該程序。 它會在自己的進程中運行,並在運行后完全卸載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM