簡體   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