gpt4 book ai didi

com - VB6 针对并行汇编进行编译

转载 作者:行者123 更新时间:2023-12-02 04:58:27 25 4
gpt4 key购买 nike

我有一个用 C# 编写的 DLL,并设置为 COM 可见性。我将其设置为并行程序集,并且可以成功地将应用程序部署到客户端 PC,无需注册。我的问题与开发PC有关。是否可以以类似的免注册方式针对 DLL 进行编译,或者是否需要在开发计算机上进行注册?我尝试通过 Project -> References 菜单直接添加 DLL,但收到一条错误消息“无法添加对特定文件的引用”。该 DLL 与 .vbp 文件位于同一目录中,我尝试在存在和不存在客户端应用程序 list 的情况下添加 DLL。

最佳答案

I have tried adding the DLL directly though the Project -> References menu

这会添加对类型库的引用。类型库是 COM 组件中类型的独立于语言的描述,VB6 使用它来了解如何生成有效的代码并提供类型检查和自动完成。类型库与 .NET 程序集中的元数据完全相同。

传统上,按照 VB6 的方式,类型库作为资源嵌入到 DLL 中。因此,您可能习惯在对话框中选择 DLL。然而,当 DLL 由 C# 生成时,这种方法就不太有效了,类型库只能在编译 C# 代码之后生成。您必须在 VB6 对话框中选择 .tlb 文件。传统方式从用 IDL 语言描述 COM 组件开始,可以在编译代码之前生成类型库,以便可以轻松地将其嵌入到最终的 DLL 中。从技术上讲,用 C# 也可以做到这一点,但构建步骤非常费力且痛苦,您基本上必须使用不同的构建命令构建 DLL 两次。

C# 库的类型库通常通过以下三种方式之一生成:

  • 使用“项目 + 属性”、“构建”选项卡、“注册 COM 互操作”选项。这需要 VS 以提升的方式运行,以便它可以写入注册表。您可以通过右键单击其快捷方式并选择“以管理员身份运行”来启动 VS 提升
  • 通过使用/tlb:filename 选项运行 Regasm.exe。第一条的替代方案,如果您出于某种原因不想运行 VS,则这是必需的。在您的开发计算机上使用/codebase 选项也是明智之举,可以使其与第一个项目完全相同,并且不需要使用 gacutil.exe 将 DLL 放入 GAC
  • 通过运行 Tlbexp.exe 实用程序(.NET 程序集的类型库导出程序)。不进行注册,仅生成 .tlb 文件。

第一个项目符号是正常选择,并且非常理想,因为您永远不会忘记以这种方式更新类型库。它在开发机器上完全没问题,因为您只关心用户机器上的免注册部署。您可能因不再这样做而陷入麻烦。

使用第三个选择是可以的,并且更符合您的目标,运行 Tlbexp从 Visual Studio 命令提示符。请记住,当您更改 C# 代码时,您必须再次执行此操作。一旦忘记这一点,然后费尽心思地试图找出为什么你的 C# 更改似乎没有效果,或者得到难以诊断的错误代码,那么你就有很多理由再次考虑第一个项目:) 你可以效仿通过使用/uninstall 选项运行 Regasm.exe 来实现免注册方案。

关于com - VB6 针对并行汇编进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24025156/

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