gpt4 book ai didi

vba - 已注册的 COM DLL 在 VBA 中有效,但在 VBScript 中无效

转载 作者:行者123 更新时间:2023-12-02 17:38:15 25 4
gpt4 key购买 nike

我在 VS2012 上用 ATL 创建了一个基本的 COM DLL。它叫做 testCOM.dll,它只有一个类叫做 CSimpleObj。 CSimpleObj 只有一种称为 addValues 的方法,它添加两个值。

我已经使用 Windows 7 64 位注册了 DLL。在 VBA 中,我手动添加了对 DLL 的引用,下面的代码可以正常工作

Dim Obj As New testCOMLib.SimpleObj
MsgBox Obj.addValues(1,2)

它给出了一个数字为 3 的消息。

现在,如果我运行包含以下内容的 vbs:

Dim Obj
Set Obj = CreateObject("testCOMLib.SimpleObj")

它经常报错,无法创建对象。但是,如果我将 "Excel.Application" ProgID(作为示例)用于 CreateObject 方法,它就可以正常工作。

我认为注册 DLL 有问题。我检查了注册表,COM 和类型库的 key 已经存在。

我该怎么办?

最佳答案

要使您的 COM 服务器可从 VBScript 使用,需要满足三个基本要求:

  • 您需要实现 IDispatch,以便支持后期绑定(bind)。 ATL 通常不是问题,它会在您使用向导时默认实现它。

  • 您的注册表脚本 (.rgs) 必须将 ProgId 写入注册表。值得注意的是,您没有报告找到它(使用 Regedit.exe 查找 HKCR\testCOMLib.SimpleObj 进行验证)。它的 CLSID 子项必须与注册表中的 CLSID 匹配,这样 COM 才能找到您的 DLL。 ATL 简单对象向导有一个陷阱,它会在您键入短名称时填写所有字段。 ProgID 字段除外。很容易忘记。

  • 在 64 位版本的 Windows 上,您将默认执行 64 位版本的 cscript.exe。它将无法找到您的 32 位 COM 服务器。您需要构建 x64 版本的服务器,或者需要使用位于 c:\windows\syswow64 中的 32 位版本的 cscript.exe。 VBA 通常不是问题,因为它通常用于 32 位版本的 Office。

SysInternals 的 Process Monitor 实用程序对于诊断此类问题非常有用。您将看到 cscript.exe 在注册表中搜索您的服务器注册的 key 。并且可能找不到它们,但是您对收到的实际错误消息不够明确。

关于vba - 已注册的 COM DLL 在 VBA 中有效,但在 VBScript 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24143406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com