gpt4 book ai didi

C# COM-Interop dll for C++ COM dll 在 2 个解决方案之间不起作用

转载 作者:行者123 更新时间:2023-12-02 10:25:40 24 4
gpt4 key购买 nike

我正在尝试重用在另一个项目中编译的互操作 DLL,但它不起作用。

我会详细说明:

  • 我编译 C++ COM DLL native_com_object.dll
  • 在同一个解决方案中,我有一个名为 LocalComClient.dll 的 C# 项目,它生成 Interop.native_com_objectLib.dll 以使用 C++ native_com_object.dll。
  • 最后,我有 另一种解决方案使用名为 RemoteComClient.dll 的 C# 项目(在另一台计算机上编译),该项目引用 native_com_object.dll(在该计算机中注册)。这会生成另一个 Interop.native_com_objectLib.dll。

  • 问题是 RemoteComClient.dll 试图加载 native_com_object.dll 它 必须 使用它自己的互操作。如果我尝试使用 LocalComClient.dll Interop .Net 无法加载程序集。

    编辑:我得到的确切异常消息是:
    Could not load file or assembly 'Interop.native_com_objectLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

    当然反之亦然(LocalComClient 无法使用 RemoteComClient 的 Interop)。

    我的第一个问题是 - 为什么?据我了解,它应该生成相同的互操作(显然我错了)。

    我的第二个问题是,是否可以为 DLL 的所有 .Net 客户端创建一个互操作?

    我会指出我使用的是 VS2013(两台机器),C# 对象是 AnyCPU,C++ 是 x64。

    重要编辑 :我无法嵌入互操作类型,因为 C# 项目是 .Net 3.5(不是 4)。

    最佳答案

    The located assembly's manifest definition does not match the assembly reference.



    非常常见的异常消息,它在运行时找到的 DLL 与编译程序时使用的引用程序集不同。一个非常基本的 DLL Hell 问题,并非特定于 COM 互操作。

    您使用 Fuslogvw.exe 诊断此类故障,它对失败的程序集绑定(bind)的跟踪会向您显示它查找的内容和找到的内容。通常的不匹配是版本号,您使用 1.0.0.0 版本的互操作程序集编译程序。该版本是从 COM 服务器的类型库版本号生成的。如果 COM 服务器发生更改并且您使用其较新的互操作程序集,则您使用的是 1.0 版 kaboom。

    而且 PublicKeyToken 很容易不匹配,您希望互操作 DLL 没有。 Kaboom 如果您在运行时加载的确实有一个。在 COM 互操作中并不少见,您倾向于将它们存储在 GAC 中,这需要一个强名称。您通常稍后会做的事情,忘记重建应用程序是一个容易的错误。

    解决方案是使用正确的互操作程序集重建客户端应用程序。

    关于C# COM-Interop dll for C++ COM dll 在 2 个解决方案之间不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28212441/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com