Dot-Net

可以從非託管 C++ 呼叫託管 DLL 嗎?

  • May 5, 2012

是否可以從非託管 C++ 程式碼呼叫 CLR DLL(例如用 C# 製作的)?

我需要一個無法以某種方式呼叫的 DLL,甚至可能通過一些使用 C++/CLI 建構的代理 C++ 程序?

CLR DLL 必須建構為 COM 可見程序集。如果您可以控制 C#,那麼它是一個簡單的重建,否則幾乎不可能直接使用它。

@SWeko 如果您可以修改原始 DLL 並且您的非託管程式碼可以依賴訪問 COM 單元(其自己的執行緒::CoInitialize()被呼叫或非託管程式碼的呼叫執行緒具有一致的單元),那麼@SWeko 給了您最佳答案。

如果不是這種情況,那麼最好的解決方案是創建一個“託管”C++ DLL 作為託管 C# 程序集的包裝器。它被稱為 C++/CLI。您可以公開非託管 C API 操作,並在這些操作的實現內部委託託管 API。它工作得很好,與呼叫 COM API 不同,沒有執行緒關聯問題。

引用自:https://stackoverflow.com/questions/3054460