在使用 CreateObject 从 VBScript 中通过 COM 引用 C++ DLL 时,如何处理 DLL 版本?

Posted

技术标签:

【中文标题】在使用 CreateObject 从 VBScript 中通过 COM 引用 C++ DLL 时,如何处理 DLL 版本?【英文标题】:How can you handle DLL versions when referencing C++ DLL's over COM from VBScript with CreateObject? 【发布时间】:2019-12-22 02:34:35 【问题描述】:

我们正在使用强制使用 VBS 的软件,但我们的分析库是用 C++ 编写的,所以我创建了一个 C++ DLL 来抽象分析库并通过 COM 接口传递它们,以便我可以访问这些在 VBS 中使用 CreateObject 的函数。

我有一个安装程序,它在 ProgramFiles 中创建一个目录来存储相关的 DLL 文件,然后它使用 RegAsm.exe 注册该目录以供 COM 使用。

目前运行正常,这很好,但会导致以下问题:如果两个 VBS 脚本需要两个不同版本的 DLL,我如何指定在 VBS 中访问哪个版本?

CreateObject 似乎没有办法指定您想要的 DLL 的版本,所以我不确定从这里去哪里......处理这个问题的正确方法是什么?

目前,如果有人想使用较旧的 VBS 脚本,他们别无选择,只能运行相应的旧版本安装程序来将他们的 DLL 降级到正确的版本。

【问题讨论】:

【参考方案1】:

我刚刚决定更新 ProgID 以包含每个主要构建/发布的当前版本。

我不确定这是否被认为是好的做法,但这似乎是在 VBScript 中指定 DLL 版本的唯一方法。

【讨论】:

你做的是一个好方法。 MS 一直这样做,例如Msxml2.DOMDocument.6.0 progid。

以上是关于在使用 CreateObject 从 VBScript 中通过 COM 引用 C++ DLL 时,如何处理 DLL 版本?的主要内容,如果未能解决你的问题,请参考以下文章

VBA CreateObject 无法在 64 位 Windows 上创建 ActiveX 组件

vba createobject函数 报错

在 Excel VBA 中使用 New 关键字和调用 CreateObject 有啥区别?

QML在Component中使用createObject填充ColumnLayout

如何在某些 java 类或包上限制 createObject()?

无法在 Windows 7 x64 上使用 VB 脚本中的 CreateObject