如何在 vbscript 中引用类型库(通常使用 xshell 库)

Posted

技术标签:

【中文标题】如何在 vbscript 中引用类型库(通常使用 xshell 库)【英文标题】:How to reference type library in vbscript (typically with xshell library ) 【发布时间】:2019-09-04 17:46:44 【问题描述】:

我想在 vbscript 中使用 xshell 库,但是当我使用 createObject() 创建对象时失败了,如何从 Xshell 应用程序提供的类型库中创建对象?

我猜xshell可以很好地注册到系统,因为我可以通过'tools->reference->“Xshell 1.0 Type Library”在excel vba项目中添加一个引用,然后我可以使用dim xshell作为xshell。 ScriptHost 和我可以从对象浏览器中找到 Xshell 信息。

我曾尝试通过oleviwer查找Xshell 1.0类型库的一些信息,但实际上我找不到xshell的ProgID。

我求助于 exeScope,我是否发现了一些有趣的东西

在右侧窗口中我们可以看到“ForceRemove xxxx-xxxxxxxx-xxxx = s'ScriptHost Class ....ProgID=s'Xshell.ScriptHost.1'.... ForceRemove 'Programmable' ... .

如何取消强制删除?

dim xshell 
set xshell=CreateObject("C:\Program Files (x86)\Common Files\NetSarang\XshellCore.tlb")
MsgBox "success"

运行错误,错误代码为“800A01AD”

ActiveX 组件无法创建对象

【问题讨论】:

你不能。 VBS 使用 IDispatch 而不是类型库。 MyObj = CreateObject("xshell.ScriptHost"). MyObj = CreateObject("xshell.ScriptHost") 将抛出错误 800A01AD 有办法绕过这个吗?我怎么能在 vbscript 中使用 xshell 对象 @user1862341 向您展示的是可执行文件中内置的Registrar Script。如果这些类正在注册,那么它们应该存在于 Windows 注册表中。 从注册脚本中我们可以看到它确实强制删除了某些类,因此该类未在 Windows 注册表中注册,如果我可以自己更改注册脚本,也许我可以注册我需要的类,比如“Xshell.ScriptHost” 【参考方案1】:

您不能从类型库创建 COM 组件实例。类型库是一个定义文件,它描述了 COM 对象库使用IUnknownIDispatch 接口支持的对象、属性和方法。

它只是一个定义文件,不包含任何实现。如果您想尝试通过 VBScript 使用 XShell,您需要找到与应用程序关联的 COM DLL。

如果 XShell 暴露给 COM,它将在 Windows 注册表中注册一个 ProgID。如果您可以使用regedit.exe 等工具在注册表中找到 ProgID,您可以使用以下检查列表来识别与其关联的 DLL,并使用ProgIDCreateObject() 来实例化 COM 组件的实例。


Error ASP 0177: 8007007e Server.CreateObject fails for COM DLL (关于从关联的 ProgID 识别 COM DLL 的信息)

【讨论】:

我尝试使用regedit搜索Xshell的progID但失败了,有没有其他方法可以在vbscript中使用xshell lib? vba引用xshell.tlb和使用xshell lib的机制是什么? @user1862341 如果您在 HKEY_CLASSES_ROOT 中搜索了 32 位和 64 位 xshell 的键和值,但仍然一无所获,那么恐怕您不走运。 VBScript 中的后期绑定需要注册的 ProgID,而 VBA 可以同时使用早期绑定和后期绑定。从 limited documentation 我可以发现它看起来好像是设计为从 XShell 内部运行并且未公开,所有示例均引用 xsh 但从未显示其实例化,因此它可能在运行时由应用程序控制。

以上是关于如何在 vbscript 中引用类型库(通常使用 xshell 库)的主要内容,如果未能解决你的问题,请参考以下文章

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

小白学习C++ 教程二十三如何安装和使用 C++ 标准库

小白学习C++ 教程二十三如何安装和使用 C++ 标准库

你如何使用 Jasmine + Resharper 引用外部库

如何在作为协议类型的 Swift 通用数据结构中使用弱引用?

库通常带有头文件吗?