2010-01-14 48 views
0

我有一個C++ COM接口的C#實現。我儘可能準確地移植了IDL(接口)。是否可以對C#COM接口實現進行故障診斷?

當C++應用程序實例化我的對象時,它成功調用其中一種方法。然後它嘗試調用另一個方法,但沒有任何反應。第二個調用的執行路徑永遠不會讓它進入C#端。

我沒有訪問C++ exe的代碼。我確實有一個工作編譯的C++版本的COM DLL對象與代碼。這是我想要在C#中替換的。

我可以使用什麼來比較C++ COM和C#COM DLL的接口,以查看是否有任何區別?這甚至有可能嗎?我試過微軟的OLE View,但它無法打開C++ DLL。我想如果我能看到我的DLL看起來和C++完全一樣,它可能會工作。

這個問題更多的是幫助我理解我可以從哪裏去。我已經提出了一個非常詳細的問題,關於我想要達到的具體實施,但沒有人感興趣。這就是爲什麼我發佈一個更一般的問題來幫助指導我找到答案。

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

回答

0

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

0

你是否用InterfaceTypeAttribute標記了C#接口來告訴CLR它應該將它編組爲IUnknown還是作爲IDispatch?

因爲如果你沒有,你在VMT中的方法插槽會搞砸。

+0

是的,根據IDL是IUnknown – Nanook 2010-01-14 23:07:44

0

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

相關問題