0

我有一个 .Net COM 可见 dll 和一个 VB6 dll。我在 GAC 上注册了 .Net dll 并注册了 VB6 dll。我的问题是 VB6 dll 是否可以引用 GAC 中的 .Net dll。如果是,如何做到这一点?通常我会regasm在 .Net dll 上使用,一切都会好起来的,但现在 .Net dll 在 GAC 中,所以我认为这种方法是不可能的。

4

2 回答 2

1

如果您使用 GAC 或尝试从 VB6 DLL 项目中使用它,没有什么特别的东西可以阻止它工作。如果您想编写早期绑定代码(实际类型名称,自动完成工作),那么 VB6 IDE 需要一个类型库。它们通常嵌入在 DLL 中,但 .NET [ComVisible] 程序集并非如此。

使用 Tlbexp.exe 或 Regasm.exe 的 /tlb 命令行选项创建类型库。喜欢:

 regasm foo.dll /tlb:foo.tlb

您现在可以在 VB6 项目中使用类型库。在 VB6 IDE 中,使用 Project + References,单击 Browse 并导航到 foo.tlb 文件。

另请注意,虽然 GAC 是避免 DLL Hell 的好方法,但您通常不会在您的开发机器上使用它,因为它会污染机器的 GAC。使用 Regasm /codebase 选项将其注册到存储 DLL 的目录中,然后不需要 GAC。当您执行此操作时,您确实会收到来自 Regasm 的警告,试图提醒您您正在冒 DLL Hell 的风险。但这对你的用户来说是个问题,而不是你。因此,您可以放心地忽略该警告。

于 2012-08-14T12:36:22.820 回答
0

这是可能的,但方法取决于您部署 .Net DLL 的方式。

如果你通过脚本来做,你可以这样做:

  1. 将您的 dll 复制到一个文件夹中,例如 c:\program files\myproduct\mydll.dll
  2. 使用 regasm 注册您的 dll 以进行 com 互操作
  3. 使用 gacutil 放入 GAC

如果使用 Visual Studio 安装项目: 1. 将 Global Assemly Cache 特殊文件夹添加到项目中 2. 将 dll 的目标文件夹设置为 GAC 3. 将 Register 属性设置为 vsdraCOM

如果您在从 VB6 添加对 .Net DLL 的引用时遇到问题,请使用 tlbexp 从您的 .Net dll 创建一个 .tlb 文件并添加对类型库的引用。

这是该过程的更详细描述的链接: http ://www.simple-talk.com/dotnet/visual-studio/build-and-deploy-a-.net-com-assembly/

于 2012-08-14T11:16:02.320 回答