用.NET COM .dll替换本机C ++ COM .dll

时间:2011-03-31 15:50:27

标签: .net c++ com com-interop

我们的客户拥有使用我们提供的本机C ++ COM注册.dll的旧Win32客户端。

我们希望用.NET版本替换原生.dll。所以我们已经构建了.NET DLL和COM注册它。我们有原生C ++测试客户端能够处理从旧.dll到新的交换,但是......似乎我们需要重新编译它们才能工作。

我们需要重新编译测试客户端,还是我们做错了什么?

我们不能要求我们的客户重新编译他们的客户。

1 个答案:

答案 0 :(得分:7)

也许您忘记在界面和类声明中使用[Guid]属性。它们必须匹配旧C ++项目的IDL中使用的IID和CLSID。或者功能不再是相同的顺序。或者它们没有相同的DISPID,以防客户端代码使用它们后期绑定。

避免这种情况的最佳方法是在.NET项目中添加对旧类型库的引用,以便可以在代码中使用旧接口。您仍然需要获得实现接口的类的[Guid],以便它具有正确的CLSID。

您可以使用OleView.exe工具View + Type Library来比较旧类型库和新类型库。复制/粘贴生成的IDL并对其进行区分。您从Regasm.exe / tlb获取新类型库。任何不匹配都可能(并且可能会)成为一个问题。