2010-01-14 71 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#实现,看看发生了什么?如果你已经这样做,请随时忽略。

相关问题