确定用于PHP DOTNET的程序集名称
我试图通过PHP的DOTNET对象使用微软的语音平台11 平台应按如下方式实例化确定用于PHP DOTNET的程序集名称,php,.net,speech-recognition,Php,.net,Speech Recognition,我试图通过PHP的DOTNET对象使用微软的语音平台11 平台应按如下方式实例化 $platform = new DOTNET("assembly-name", "Microsoft.Speech.Recognition"); 但是如何检索Speech Platform 11的程序集名称呢?(替换初始化调用中的“程序集名称”) 我已经尝试了几个程序集名称。。。猜测,显然没有运气。 正在引发的初始化错误 Failed to instantiate .Net object [CreateInst
$platform = new DOTNET("assembly-name", "Microsoft.Speech.Recognition");
但是如何检索Speech Platform 11的程序集名称呢?(替换初始化调用中的“程序集名称”)
我已经尝试了几个程序集名称。。。猜测,显然没有运气。
正在引发的初始化错误
Failed to instantiate .Net object [CreateInstance] [0x80070002] The system cannot find the file specified
更新
通过下面的代码,我能够让PHP找到并使用程序集
$full_assembly_string = 'Microsoft.Speech, Version=11.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35';
$full_class_name = 'Microsoft.Speech.Recognition.SpeechRecognitionEngine';
$interface = new DOTNET($full_assembly_string, $full_class_name);
然而,还有一个新的障碍:
Failed to instantiate .Net object [Unwrapped, QI for IDispatch] [0x80004002] No such interface supported
乍一看,这似乎与COM的可见性有关。但是,如果出于任何原因,该类对COM不可见(这似乎很奇怪),如何改变这一点?甚至可能吗?未测试。只是另一种猜测 根据Microsoft语音平台SDK 11文档: 我想尝试一下:
- “汇编”
Microsoft.Speech
- “classname”
Microsoft.Speech.Recognition.SpeechRecognitionEngine
只是名称空间Microsoft.Speech.Recognition
$sre = new DOTNET( 'Microsoft.Speech', 'Microsoft.Speech.Recognition.SpeechRecognitionEngine' );
方法记录在这里:谢谢,不幸的是,它以同样的方式失败。然而,“系统找不到指定的文件”错误使我认为问题可能出在其他地方。通过启动Process Monitor,我注意到PHP正在做一些奇怪的事情:它在自己的目录中搜索语音平台文件。c:\Program Files(x86)\Php7\Microsoft.Speech\Microsoft.Speech.dll,显然,失败。我建议将带有dll的路径添加到路径变量。我假设正常的dll查找顺序适用。(有太多的警告没有出现在手册中。太乱了。)小步骤:现在找到了DLL(请参见更新的问题),但启动失败,“未能实例化.Net对象[Unwrapped,QI for IDispatch][0x80004002]不支持此类接口”。可能还有另外一个没有提到的警告:COM接口的可见性。关于这个问题有什么提示吗?