【问题标题】:Can vb6 dll use a .net com visable dll that is in the gacvb6 dll可以使用gac中的.net comvisable dll吗
【发布时间】:2012-08-10 13:23:21
【问题描述】:
我有一个 .Net COM 可见 dll 和一个 VB6 dll。我在 GAC 上注册了 .Net dll 并注册了 VB6 dll。我的问题是 VB6 dll 是否可以引用 GAC 中的 .Net dll。如果是,如何做到这一点?通常我会在 .Net dll 上使用regasm,一切都会好起来的,但现在 .Net dll 在 GAC 中,所以我认为这种方法不可行。
【问题讨论】:
标签:
.net
dll
com
vb6
com-interop
【解决方案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 的风险。但这对您的用户来说是个问题,而不是对您而言。所以你可以放心地忽略警告。
【解决方案2】:
这是可能的,但方法取决于您如何部署 .Net DLL。
如果你通过脚本来做,你可以这样做:
- 将您的 dll 复制到一个文件夹中,例如 c:\program files\myproduct\mydll.dll
- 使用 regasm 注册您的 dll 以进行 com 互操作
- 使用 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/