【问题标题】:Create VB6 application using a class in a DLL, then swap out that DLL after build?使用 DLL 中的类创建 VB6 应用程序,然后在构建后换出该 DLL?
【发布时间】:2011-12-31 12:02:03
【问题描述】:

所以我的问题相对简单,我可以创建引用 dll 中的类的 VB6 应用程序,然后在运行时用该 dll 替换另一个吗?

现在我的初步猜测是……在 VB6 中没有机会。

所以我的想法转向了 VB.net 互操作 dll。我可以在这里做,然后从VB调用interop dll吗?

同样,我的猜测是否定的......但如果有人知道不同,我会很高兴。

我认为唯一可行的方法是 .Net 中的 DI,但我仅限于 .net 2 或 3.5,因此我不知道这是否可能。

所以对于背景....

我有一个特定站点使用的 dll,但我们不想将它发送给所有人。相反,我们想要构建一个仅具有接口设置的克隆 dll,以便完成 VB6 构建。 当它到达需要它的站点时,他们想要替换虚拟 dll,并改为放入他们的版本。

注意:我们确实在安装 RegFreeCOM 时使用它,所以我确实有清单文件,如果需要我可以使用它。

任何想法都将不胜感激。

尼克

【问题讨论】:

  • 能否在 VB6 中使用后期绑定而不是对 dll 的硬引用?
  • 您可以在大约 10 分钟内进行测试。创建一个 dll 项目,使用一个返回字符串的方法放置一个类,将其编码为返回“abc”。编写测试工具,添加引用,调用方法并显示它。现在在一个新项目中编写另一个 dll。相同的类名,相同的方法名,返回“def”。将 dll 复制到测试工具文件夹中的第一个,然后运行测试工具。我想你会看到新的字符串,但测试是相信的。如果我在这台机器上安装 VB6,我会这样做,可能比输入评论更快。
  • 这是将代码放在 DLL 中而不是在应用程序中的根本原因之一(代码重用/共享是另一个问题)
  • 谢谢凯特。设法对其进行了测试,并且按照您所说的进行。我期待 DLL Hell,我很高兴。

标签: vb.net vb6 com-interop


【解决方案1】:

您也可以使用后期绑定,而不是直接在 VB6 代码中进行引用,而是创建一个对象,然后将该对象设置为一个实例。 示例和信息:

MVPS

Microsoft

【讨论】:

  • 这个真的没必要,因为问题的前提不正确。他认为交换新的 DLL 是不可能的,而事实上确实如此。
  • @DaveInCaz 我建议这样做的原因是问题中没有任何内容可以保证二进制兼容性是可能的。您和公认的答案都是正确的,因为如果 DLL 是二进制兼容的,则不需要后期绑定。如果 DLL 不是出于某种原因,那么后期绑定将是更好的选择。
【解决方案2】:

它是一个 COM dll,因此它不会静态链接到 VB6 exe,只要两个 DLL 的类型库中的 clsid 和接口 id 相同,您就可以随意交换它们。 (如果它是一个 VB6 dll,这与“二进制兼容性”构建选项无关)

【讨论】:

  • 谢谢亚历克斯。我的困惑之一是如何强制 CLSID 和 TLBID 相同,而二进制兼容性为我做到了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多