【问题标题】:Replace native C++ COM .dll with .NET COM .dll将本机 C++ COM .dll 替换为 .NET COM .dll
【发布时间】:2011-07-27 00:50:16
【问题描述】:

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

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

我们需要重新编译测试客户端是否有一些合乎逻辑的原因,或者我们做错了什么?

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

【问题讨论】:

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

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


【解决方案1】:

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

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

您可以使用 OleView.exe 工具,查看 + 类型库来比较新旧类型库。复制/粘贴生成的 IDL 并对其进行比较。您可以从 Regasm.exe /tlb 获得新的类型库。任何不匹配都可能(并且很可能会)成为问题。

【讨论】:

    猜你喜欢
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 2014-12-05
    • 2015-02-22
    • 2011-12-29
    • 1970-01-01
    • 2013-06-21
    相关资源
    最近更新 更多