确定用于PHP DOTNET的程序集名称

确定用于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

我试图通过PHP的DOTNET对象使用微软的语音平台11

平台应按如下方式实例化

$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接口的可见性。关于这个问题有什么提示吗?