在使用 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 组件
在 Excel VBA 中使用 New 关键字和调用 CreateObject 有啥区别?
QML在Component中使用createObject填充ColumnLayout