繁体   English   中英

为什么PHP COM对象没有返回正确的结果?

[英]Why PHP COM objects are not returning correct results?

我正在尝试使用PHP访问Windows SAPI5或文本转语音(TTS)。 标准方法是为“ SAPI.SpVoice”创建一个COM对象,然后获取已安装的语音。

示例PHP代码:

<?php

$obj = new COM('SAPI.SpVoice');
$voices = $obj->GetVoices;
$count = $voices->Count;

print $count; #prints "1"

不幸的是,PHP的COM对象返回的输出不正确,因为我的系统上安装了5种声音,但是PHP仅返回1。

因此,仅检查这是否是特定于PHP的问题,我在Perl 5.8(草莓)中编写了相同的代码。

示例Perl代码:

#!/usr/bin/perl
use Win32::OLE;

my $obj = Win32::OLE->new('SAPI.SpVoice');
my $voices = $obj->GetVoices;
my $count = $voices->Count;

print $count; #print "5" which is correct.

因此,perl代码正确返回了我的系统上有5个TTS语音,但是PHP仅返回了1个?

这是一个错误还是我做错了什么? 这可能是什么原因?

PS我已经在两台不同的计算机上尝试过,结果是相同的。

经过一些试验错误,我发现了这一点。 看来,如果我使用32位版本的PHP,那么我会得到正确的结果(5个声音)。 但是由于默认情况下我安装了64位版本,所以我只能听到1条声音。

我认为TTS声音大多为32位(就像安装在系统上的声音一样),因此当使用64位php.exe运行时,它只会返回64位声音。 使用32 php.exe,它将返回所有声音。

将其发布为答案,以防将来有人遇到类似问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM