如何在VBScript中引用MS Windows 7 64bit下的WIN32对象
How to reference to WIN32 object under MS Windows 7 64bit in VBScript
我有这个 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
我遇到的问题是MS Windows 7 64下的同一个包安装在C:\Windows\SysWOW64\
下
所以如果你启动这个控制台它是可见的
C:\Windows\SysWOW64\Speech\SpeechUX\sapi.cpl
它对上面的 VBScript 有影响,因为它使用 64 位 SAPI 而不是 32 位 SAPI。
所以我想找一个正确的way/code来使用
Set sapi=CreateObject("sapi.spvoice")
对于 WIN32 对象。所以有点像如何在 HTML 页面.[= 的 VBScript 中的 Windows 64 位下创建 ActiveX Win32 16=]
如何实现?
当您第一次提出 VBScript 运行 在 Internet 浏览器中 的问题时并不清楚(假设 Internet Explorer 在其他浏览器中内置了对 VBScript 的支持是none存在).
在使用 Internet 浏览器的情况下,处理多个体系结构时应用相同的规则。客户端不是脚本主机 (cscript
或 wscript
) Internet 浏览器承担此角色。
因此,我们必须确保我们使用的浏览器架构版本正确。
x64 (64 位)
%ProgramFiles%\Internet Explorer\iexplore.exe
x86 (32 位)
%ProgramFiles(x86)%\Internet Explorer\iexplore.exe
如果 Internet 浏览器的架构版本错误,CreateObject()
函数将在注册表的错误部分查找相应的 ProgId
(sapi.spvoice
),这会导致这样的错误:
Error: ActiveX component can't create object
Code: 800A01AD
Source: Microsoft VBScript Runtime Error
这在仅 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 操作系统的位置。
我有这个 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
我遇到的问题是MS Windows 7 64下的同一个包安装在C:\Windows\SysWOW64\
所以如果你启动这个控制台它是可见的
C:\Windows\SysWOW64\Speech\SpeechUX\sapi.cpl
它对上面的 VBScript 有影响,因为它使用 64 位 SAPI 而不是 32 位 SAPI。
所以我想找一个正确的way/code来使用
Set sapi=CreateObject("sapi.spvoice")
对于 WIN32 对象。所以有点像如何在 HTML 页面.[= 的 VBScript 中的 Windows 64 位下创建 ActiveX Win32 16=]
如何实现?
当您第一次提出 VBScript 运行 在 Internet 浏览器中 的问题时并不清楚(假设 Internet Explorer 在其他浏览器中内置了对 VBScript 的支持是none存在).
在使用 Internet 浏览器的情况下,处理多个体系结构时应用相同的规则。客户端不是脚本主机 (cscript
或 wscript
) Internet 浏览器承担此角色。
因此,我们必须确保我们使用的浏览器架构版本正确。
x64 (64 位)
%ProgramFiles%\Internet Explorer\iexplore.exe
x86 (32 位)
%ProgramFiles(x86)%\Internet Explorer\iexplore.exe
如果 Internet 浏览器的架构版本错误,CreateObject()
函数将在注册表的错误部分查找相应的 ProgId
(sapi.spvoice
),这会导致这样的错误:
Error: ActiveX component can't create object
Code: 800A01AD
Source: Microsoft VBScript Runtime Error
这在仅 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 操作系统的位置。