2011-08-22 62 views
3
​​3210

我有一個C++ DLL中定義的函數的上述簽名,如abc.dll。我無法在C#中創建適當的方法簽名。請注意,CustomClass在某些文件中定義,例如xyz.dll__declspec(dllexport)。我嘗試使用this工具來生成簽名。P/Invoke - 使用DLLImport的自定義類型的C#簽名?

對不起,如果我重複了這個問題。發佈前我已經嘗試過搜索。

+0

您不能調用將C++類對象作爲參數的函數。你必須用C++/CLI語言編寫一個包裝器。 –

+0

您需要更多信息才能獲得答案。特別是:什麼是'CustomClass'和'ICustomObject'? –

+0

CustomCLass是一個基本的C++字符串包裝類,ICustomObject是一個COM接口。它有一個idl定義 –

回答

1

可能的解決方案是創建用C++編寫的混合程序集。它可以包含abc.dll中的任何必需的頭文件和調用方法,並且可以在同一時間公開受管理的包裝器。

+0

如果你能指出你正在談論的一些基本樣本,那將是非常好的。 –

+0

1)在常規設置中啓用'Common Language Runtime Support/clr',爲您的解決方案添加新的C++項目。包括任何與abc和/或xyz相關的必要頭文件。 2)然後在這個C++項目中創建新的公共參考類AbcWrapper(或更好)。 AbcWrapper內部調用你的'本地'代碼。 3)在你的託管代碼中使用你的AbcWrapper類。 –

+0

abc.dll有一個.def文件,其中定義了函數入口點,它也已經包含了所需的頭文件。那麼,是否真的有必要創建一個託管的C++包裝器?只要DllImport應該工作,如果我知道如何處理自定義類型?但是,我會嘗試你的建議。 –