我有一个C ++ COM接口的C#实现。我尽可能准确地移植了IDL(接口)。
当C ++应用程序实例化我的对象时,它成功调用其中一个方法。然后它尝试调用另一个方法但没有任何反应。第二个调用的执行路径永远不会进入C#端。
我无法访问C ++ exe代码。我有一个工作编译的C ++版本的COM DLL对象与代码。这就是我想在C#中替换的内容。
我可以使用什么来比较C ++ COM和C#COM DLL的接口,看看是否有任何差异?这甚至可能吗?我已经尝试过微软的OLE视图,但它很难打开C ++ DLL。我想如果我能看到我的DLL看起来与它可能有效的C ++完全一样。
这个问题更多的是帮助我理解我可以从这里走的路。我已经提出了一个非常详细的问题,关于我试图实现的确切实现,但没有人感兴趣。这就是为什么我发布一个更一般的问题来帮助指导我的答案。
我真的被困住了。这已经超过25个小时了。
答案 0 :(得分:0)
您是否使用InterfaceTypeAttribute标记了C#接口,告诉CLR它应该将其编组为IUnknown还是IDispatch?
因为如果你没有,你的VMT中的方法插槽就会搞砸了。
答案 1 :(得分:0)
我不认为您可以编写自己的测试应用程序(C ++或C#或两者)来使用C#实现并查看发生了什么?如果你已经这样做了,请随意忽略。
答案 2 :(得分:0)
解决了我的兼容性问题后,我发现C ++ dll没有公开我期望的接口项。虽然这个问题的目的是如何调试或比较2个dll的公开接口,但是我的项目工作是使用我正在实现的C#接口上的[ComImport]属性,而不是[ComVisible(true)]。我在接口声明上使用了[PreserveSig]属性来强制实现兼容性。这是我对正在发生的事情的理解。