我们的客户拥有使用我们提供的本机C ++ COM注册.dll的旧Win32客户端。
我们希望用.NET版本替换原生.dll。所以我们已经构建了.NET DLL和COM注册它。我们有原生C ++测试客户端能够处理从旧.dll到新的交换,但是......似乎我们需要重新编译它们才能工作。
我们需要重新编译测试客户端,还是我们做错了什么?
我们不能要求我们的客户重新编译他们的客户。
答案 0 :(得分:7)
也许您忘记在界面和类声明中使用[Guid]属性。它们必须匹配旧C ++项目的IDL中使用的IID和CLSID。或者功能不再是相同的顺序。或者它们没有相同的DISPID,以防客户端代码使用它们后期绑定。
避免这种情况的最佳方法是在.NET项目中添加对旧类型库的引用,以便可以在代码中使用旧接口。您仍然需要获得实现接口的类的[Guid],以便它具有正确的CLSID。
您可以使用OleView.exe工具View + Type Library来比较旧类型库和新类型库。复制/粘贴生成的IDL并对其进行区分。您从Regasm.exe / tlb获取新类型库。任何不匹配都可能(并且可能会)成为一个问题。