簡體   English   中英

COM 互操作:C# COM Class Wrapper 拋出異常

[英]COM Interop: C# COM Class Wrapper throws exception

我在我的 C# 項目中添加了對 COM 類型庫的引用。 我看到了由 TlbImp 創建的接口和 object class。 接口方法之一的簽名是:

string GetResString(int hr);

它對應於在 C++ header 中定義的非托管副本:

STDMETHOD(GetResString)(EMS_RESULT hr, /*[out,retval]*/ BSTR *pbszString);

當我使用以下方法調用上述方法時:

 ITranslationObject translator = new TranslationObjectClass();
  var str = translator.GetResString(2);

我收到一條異常消息“MfcVSApp1.exe 中 0x00000000 處的未處理異常:0xC0000005:訪問沖突讀取位置 0x00000000。”

我嘗試使用 P/Invoke 和 DLLImport 手動創建包裝器並得到相同的結果。

這是我第一次嘗試從托管代碼進行 COM 互操作,所以我可能遺漏了一些東西。 請以我的方式提出任何想法,因為我需要它來工作。

TIA。

瘋狂的猜測......也許不是 COM 接口問題,而是文件路徑問題? 確保 COM DLL 使用的文件的所有相對路徑都與您的 EXE 相關,而不是您的 DLL。 對於 COM,它們並不總是在同一個地方。

例外具有誤導性。 實際互操作沒有問題。 Tlblmp 關心的實體按預期工作。 這個特殊的 COM object 需要在任何其他公開方法之前調用 Initialze 方法,而我沒有這樣做。 初始化 COM object 后,不再拋出異常並且互操作按預期工作。 感謝 Hans P 的提示。

暫無
暫無

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

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