VBScript新手使用GetObject连接应用时遇424对象必需错误求助
嘿,我看了你这段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




