【问题标题】:How to reference to WIN32 object under MS Windows 7 64bit in VBScript如何在 VBScript 中引用 MS Windows 7 64bit 下的 WIN32 对象
【发布时间】:2016-02-25 18:39:21
【问题描述】:

我有这个 VBScript,它在 MS Windows 7 32 位下的本地 html 页面中工作得很好,因为它引用了 MS Windows 文本到语音包是 32 位。

Dim sapi
Set sapi=CreateObject("sapi.spvoice")
  For Each Voice In sapi.getvoices
     I = I + 1
     msgbox "" & (I - 1) & " - " & Voice.GetDescription
Next

我面临的问题是C:\Windows\SysWOW64\下安装了MS Windows 7 64下的同一个包

所以如果你启动这个控制台它是可见的

C:\Windows\SysWOW64\Speech\SpeechUX\sapi.cpl

它对上面的 VBScript 有影响,因为它使用 64 位 SAPI 而不是 32 SAPI。

所以我想找到一个正确的方法/代码来使用

Set sapi=CreateObject("sapi.spvoice")

对于 WIN32 对象。所以在HTML页面的VBScript中如何在Windows 64位下创建ActiveX Win32。

如何实现?

【问题讨论】:

  • “而且它对上面的VB Script有影响,因为它使用的是64bit SAPI而不是32 SAPI。” - 这句话不应该是相反的吗?跨度>

标签: html vbscript com sapi


【解决方案1】:

当您第一次提出 VBScript 在 Internet 浏览器中运行的问题时并不清楚(假设 Internet Explorer 作为其他浏览器中对 VBScript 的内置支持不存在)

在使用 Internet 浏览器的场景中,在处理多个架构时适用相同的规则。而不是客户端是脚本主机cscriptwscript,Internet 浏览器承担了这个角色。

因此,我们必须确保我们使用的是浏览器的正确架构版本。

x64 (64 位)

%ProgramFiles%\Internet Explorer\iexplore.exe

x86 (32 位)

%ProgramFiles(x86)%\Internet Explorer\iexplore.exe

如果 Internet 浏览器的架构版本错误,CreateObject() 函数将在注册表的错误部分查找对应的ProgId (sapi.spvoice),这可能导致像这样的错误:

错误:ActiveX 组件无法创建对象
代码:800A01AD
来源:Microsoft VBScript 运行时错误

这在仅 32 位的应用程序中更为常见,因为注册表的 64 位部分永远不会包含相应的已注册 COM 组件。

您有时可能会发现,无论出于何种原因,您都必须手动注册 COM DLL,这也可能让一些人感到困惑。了解这些差异很重要。

注册一个 x64 COM DLL

%SystemRoot%\System32\regsvr32.exe

注册一个 x86 COM DLL

%SystemRoot%\SysWOW64\regsvr32.exe

还需要注意的是,这仅适用于 64 位 Windows 操作系统,因为 32 位操作系统仅包含 64 位等效位置。 %ProgramFiles(x86)SysWOW64 都是特定于 64 位 Windows 操作系统的位置。

【讨论】:

    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2011-11-05
    • 1970-01-01
    • 2010-12-18
    • 2011-12-17
    相关资源
    最近更新 更多