替换本机C++;COM.dll与.NET COM.dll 我们的客户有使用我们提供的本地C++ COMLISTEL.DLL的旧Win32客户机。p>

替换本机C++;COM.dll与.NET COM.dll 我们的客户有使用我们提供的本地C++ COMLISTEL.DLL的旧Win32客户机。p>,.net,c++,com,com-interop,.net,C++,Com,Com Interop,我们想用.NET版本替换本机.dll。因此,我们构建了.NETDLL,COM注册了它。我们有本地C++测试客户端,能够处理从旧的DLL到新的交换,但是…看来我们需要重新编译它们才能工作 我们为什么需要重新编译测试客户机,或者我们做错了什么 我们无法要求客户重新编译其客户端。可能您忘记在接口和类声明上使用[Guid]属性。它们必须匹配用于旧C++项目IDL中的IID和CLSID。或者函数的顺序不再相同。或者它们没有相同的DISPID,以防客户端代码使用它们 避免这种情况的最好方法是在.NET项目中

我们想用.NET版本替换本机.dll。因此,我们构建了.NETDLL,COM注册了它。我们有本地C++测试客户端,能够处理从旧的DLL到新的交换,但是…看来我们需要重新编译它们才能工作

我们为什么需要重新编译测试客户机,或者我们做错了什么


我们无法要求客户重新编译其客户端。

可能您忘记在接口和类声明上使用[Guid]属性。它们必须匹配用于旧C++项目IDL中的IID和CLSID。或者函数的顺序不再相同。或者它们没有相同的DISPID,以防客户端代码使用它们

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


您可以使用OleView.exe工具“查看+类型库”来比较新旧类型库。复制/粘贴生成的IDL并将其区分。您可以从Regasm.exe/tlb获得新的类型库。任何不匹配都可能(也可能会)是一个问题。

可能您忘记在接口和类声明上使用[Guid]属性。它们必须匹配用于旧C++项目IDL中的IID和CLSID。或者函数的顺序不再相同。或者它们没有相同的DISPID,以防客户端代码使用它们

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


您可以使用OleView.exe工具“查看+类型库”来比较新旧类型库。复制/粘贴生成的IDL并将其区分。您可以从Regasm.exe/tlb获得新的类型库。任何不匹配都可能(也可能会)是一个问题。

可能是因为TLB文件或GUID不同,因此它无法识别新接口。我假设您正在构建一个COM到.NET包装DLL,因为旧的Win32客户端不理解.NET,对吗?可能是因为TLB文件或GUID不同,因此它无法识别新接口。我假设您正在构建一个COM到.NET的包装DLL,因为旧的Win32客户端不理解.NET,对吗?