【问题标题】:How can I reference a com visible C# dll in a vb6 library project using a manifest?如何使用清单在 vb6 库项目中引用 com 可见的 C# dll?
【发布时间】:2015-01-22 00:20:15
【问题描述】:

我有 ac# com 可见 dll,我想在 vb6 项目中调用这个 dll,它也会生成一个 dll。我没有使用 regasm.exe 来执行此调用,而是使用清单生成 c# dll 然后创建它的 tlb 并从 vb6 调用它。

我在 c# dll 中创建了两个接口,一个是 Itest,另一个是 Itest2,使两个接口都可见,并在两个接口中添加了 Guid,有两个名为 testimp 和 classimp 的类分别实现了这两个接口。这两个类是 comvisible , Classinterface 类型为 none 并具有各自的 GUID。

问题是我只能从我的 vb6 项目中实例化 testimp 类而不是 classimp 类。

【问题讨论】:

  • VB6 非常反对任何使清单工作的尝试。主要问题是它不直接支持将清单作为资源嵌入,并且当您使用 VB6 IDE 进行调试时,清单无法工作。您唯一能做的就是仅在调试和测试代码并准备好部署之后尝试此操作。使用 mt.exe 将清单作为资源 ID #2 嵌入到 VB6 dll 中。并且请考虑您仍然需要注册 VB6 dll 以便客户端程序可以找到它,因此您实际上并不领先。
  • 通常,如果您在 Visual Studio 中编译您的 comvisible C# DLL,如果在项目设置中选择了“注册 COM 互操作”选项,它会自动注册。然后你可以在 VB6 中引用它。

标签: c# .net vb6 com-interop


【解决方案1】:

COM 注册通常从 TLB GUID 中引用 - 将在注册表中注册

请注意,在 Windows Vista 及更高版本 (IIRC) 上,它也可以在 .manifest 文件中使用应用程序本地 COM 注册进行部署:

【讨论】:

  • 能否请您详细说明答案的最后一行?
  • 我认为您需要先详细说明您的目标/问题。最后一行是一个超链接,它是不言自明的。在 SO 上,我们可以帮助那些在解决方案中遇到具体步骤的人。
  • 我已经编辑了整个问题。希望这可以清楚地解释我的麻烦。
【解决方案2】:

如果您的问题是按用户安装,请使用 Regasm 创建一个 regfile,然后编辑 regfile 以将 HKCR 的引用更改为 HKCU\Software\Classes。

【讨论】:

    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 2010-09-18
    • 2011-03-21
    • 2011-08-08
    • 2011-07-13
    • 2012-03-09
    • 2014-06-30
    • 2018-09-13
    相关资源
    最近更新 更多