【问题标题】:Add a VB6 ActiveX DLL reference to a VS2008 project向 VS2008 项目添加 VB6 ActiveX DLL 引用
【发布时间】:2011-09-14 07:22:04
【问题描述】:

在工作中,我们有一个 VB6 项目(ActiveX DLL),我们需要将其添加为对另一个 VS2008 C# 项目的引用。

那里的一位开发人员告诉我,他们过去可以这样做,但现在我们对 VB6 DLL 进行了更改,不得不重新编译它。

因此,我们需要更新 VS2008 项目中的引用,但是当我们尝试将 VB6 DLL 的引用添加回(删除旧引用后)到 VS2008 项目时,我们得到一个黄色的“!”新添加的引用上的图标,然后在我们构建时,VS2008 说找不到引用。

我尝试了“浏览”和“COM”选项卡,您可以在其中添加参考,但没有运气。

我们需要某种 TLB 来添加它吗?

谢谢。

【问题讨论】:

  • 奇怪的问题。不,TLB 嵌入在 VB6 DLL 中。您可以通过运行 Tlbimp.exe 显式执行此操作,然后将生成的互操作程序集添加到引用中。也许您会在此过程中收到更好的错误消息。

标签: c# visual-studio-2008 vb6 reference activex


【解决方案1】:

您需要在命令提示符下执行以下操作:

#CD to wherever the dll is located
regsrv32 /u foo.dll
regsrv32 foo.dll

这将注销旧的 com 对象并注册新的对象。

【讨论】:

  • 我得到了你的建议:错误 1 ​​无法确定 COM 引用“MyAnnoyingVB6Dll”的依赖关系。加载类型库/DLL 时出错。 (来自 HRESULT 的异常:0x80029C4A (TYPE_E_CANTLOADLIBRARY))WindowsFormsApplication1 –
  • Dependency Walker 可以帮助您找出缺少的依赖项。
【解决方案2】:

他是对的,你可以在命令提示符下这样做。

但请记住,您的 Active-X 控件 DLL 可能是 16 位的,因此请使用

    regsrv /u foo.dll
    regsrv foo.dll

从命令提示符。但是 32 位的 regsrv32 可以正常工作!

【讨论】:

  • VB6 无法生成 16 位 DLL。
【解决方案3】:

我使用了 OLE/COM 对象查看器(包含在 Windows SDK 6.0A 中),然后我在“所有对象”中看到了一堆 COM 条目,即:MyDLLName.className,其中一些指向一个不再存在的 DLL 文件。删除了 Windows 注册表中所有指向已删除 DLL 的相关 COM 条目,并留下了所有指向现有 DLL 的条目,然后我可以在我的 VC# 项目中成功导入它。

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 2022-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多