簡體   English   中英

是否可以對C#COM接口實現進行故障排除?

[英]Is it possible to troubleshoot C# COM Interface Implementations?

我有C ++ COM接口的C#實現。 我已經盡可能准確地移植了IDL(接口)。

當C ++應用程序實例化我的對象時,它會成功調用方法之一。 然后,它嘗試調用另一個方法,但是什么也沒有發生。 第二個調用的執行路徑永遠不會到達C#端。

我無權訪問C ++ exe代碼。 我確實有一個帶有代碼的COM DLL對象的可編譯C ++版本。 這就是我要在C#中替換的內容。

我可以用來比較C ++ COM和C#COM DLL的接口以查看是否存在差異? 這有可能嗎? 我已經嘗試了Microsoft的OLE View,但是無法打開C ++ DLL。 我想,如果我能看到我的DLL看起來完全像C ++,那么它可能會起作用。

這個問題更多地是關於幫助我理解我可以從這里去哪里。 我已經問過一個非常詳細的問題,關於我要實現的確切實現,但是沒有人對此感興趣。 這就是為什么我要發布一個更籠統的問題,以幫助指導我找到答案。

我真的被卡住了。 已經超過25個小時了。

您是否已用InterfaceTypeAttribute標記C#接口以告知CLR應該將其封送為IUnknown還是IDispatch?

因為如果不這樣做,您的VMT中的方法插槽將被弄亂。

我不認為您可以編寫自己的測試應用程序(C ++或C#或兩者)來工作C#實現並查看發生了什么? 如果您已經這樣做,請隨時忽略。

解決了兼容性問題后,我發現C ++ dll沒有公開我期望的接口項目。 盡管此問題的目的是如何調試或比較2個dll的公開接口,但我通過使用正在實現的C#接口而不是[ComVisible(true)]上的[ComImport]屬性來使項目工作。 我在接口聲明上使用了[PreserveSig]屬性來強制兼容性。 這是我對正在發生的事情的理解。

暫無
暫無

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

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