You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VBScript新手使用GetObject连接应用时遇424对象必需错误求助

帮你排查GetObject调用的错误问题

嘿,我看了你这段VBScript代码,错误出在GetObject那行,大概率是调用方式或者参数的问题,我给你拆解几个可能的原因和解决办法:

1. GetObject的参数用错了!

这应该是核心问题!你写的Set oOL = GetObject("Quantum.SysMod"),其实是把ProgID(也就是那个类名)当成了文件路径来传,系统会傻呵呵地去找一个叫Quantum.SysMod的文件,肯定找不到啊!

如果是要连接已经打开的Quantum.exe实例,GetObject的正确语法是第一个参数留空,第二个参数传ProgID,也就是:

Set oOL = GetObject(, "Quantum.SysMod")

之前你注释掉的那条带路径的语句,是用来从指定文件加载并创建新实例的,不是连接已经运行的程序,所以如果程序已经开着,那条语句要么启动新实例,要么直接报错。

2. 先确认ProgID是否真的正确

你得先搞清楚Quantum.SysMod是不是这个应用正确的COM ProgID:

  • 打开注册表(运行regedit),在HKEY_CLASSES_ROOT下面搜Quantum.SysMod,要是搜不到,要么是名字写错了(比如大小写、拼写错误),要么这个应用的COM组件根本没注册。
  • 要是找不到,你可以试试找Quantum.exe的安装目录里有没有注册脚本(比如.reg或者.bat),或者用regsvr32手动注册相关的DLL文件(不过得注意是32位的regsvr32,因为你的程序在Program Files (x86)里,是32位的)。

3. 位数不匹配的坑

你的应用在Program Files (x86)下,说明是32位程序。如果你在64位系统上直接双击VBS脚本,默认会用64位的WScript.exe来运行,这时候跨位数调用32位的COM对象肯定会失败。

解决办法很简单:找到C:\Windows\SysWOW64\wscript.exe,把你的VBS脚本拖到这个程序上运行,这样就是32位的执行环境,和你的应用匹配。

4. 别用On Error Resume Next掩盖错误

你加了On Error Resume Next,会把具体的错误信息都藏起来,根本不知道是找不到文件还是ProgID不对。建议先把这句注释掉,运行脚本,看弹出的错误提示,比如“无效的类字符串”就是ProgID错了,“找不到指定的文件”就是参数传错了,这样能精准定位问题。

5. 顺便提下你的命令参数

你定义的lcCmd = "'QQWOMOD.TWOAuto', '100',False",看起来是给后续方法传的参数,要注意参数类型是否匹配哦!比如如果方法需要的是数值类型的100,你传带引号的字符串'100'可能会出问题,得改成100(去掉引号),具体要看那个DLL函数的参数要求。

最后给你一个修正后的示例代码参考:

Dim oOL
Dim lcCmd
' 这里根据实际方法的参数类型调整,比如数值就不要引号
lcCmd = "QQWOMOD.TWOAuto, 100, False"
MsgBox lcCmd

' 先注释掉错误处理,看具体错误
' On Error Resume Next

' 正确连接已运行实例的写法
Set oOL = GetObject(, "Quantum.SysMod")

' 检查是否连接成功
If Err.Number <> 0 Then
    MsgBox "连接失败:" & Err.Description & " 错误代码:" & Err.Number
    WScript.Quit
End If

' 假设调用对象的某个方法,比如ExecuteCmd,记得换成实际的方法名
oOL.ExecuteCmd lcCmd

' 释放对象
Set oOL = Nothing

内容的提问来源于stack exchange,提问作者Mile140

火山引擎 最新活动