【问题标题】:Determining assembly name for use with PHP DOTNET确定与 PHP DOTNET 一起使用的程序集名称
【发布时间】:2016-02-10 08:52:13
【问题描述】:

我正在尝试通过 PHP 的 DOTNET 对象使用 Microsoft 的 Speech Platform 11 https://msdn.microsoft.com/en-us/library/jj127858.aspx

平台应按如下方式实例化

$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 不可见(而且看起来很奇怪),如何更改呢?有没有可能?

【问题讨论】:

    标签: php .net speech-recognition


    【解决方案1】:

    未测试。只是另一个猜测。

    根据 Microsoft Speech Platform SDK 11 Docs:

    https://msdn.microsoft.com/en-us/library/microsoft.speech.recognition.speechrecognitionengine.aspx

    我会试一试:

    • “程序集”Microsoft.Speech
    • “类名”Microsoft.Speech.Recognition.SpeechRecognitionEngine
    • Microsoft.Speech.Recognition 只是命名空间

      $sre = new DOTNET(
          'Microsoft.Speech',
          'Microsoft.Speech.Recognition.SpeechRecognitionEngine'
      );
      

    方法记录在这里:https://msdn.microsoft.com/en-us/library/microsoft.speech.recognition.speechrecognitionengine_members(v=office.14).aspx#Anchor_2

    【讨论】:

    • 谢谢,不幸的是它以同样的方式失败了。然而,“系统找不到指定的文件”错误让我认为问题可能出在其他地方。通过启动 Process Monitor,我注意到 PHP 正在做一些奇怪的事情:它在自己的目录中搜索 Speech Platform 文件。 c:\Program Files (x86)\Php7\Microsoft.Speech\Microsoft.Speech.dll 显然失败了
    • 我建议将带有 dll 的路径添加到 PATH 变量中。我假设正常的 DLL 查找顺序适用。 (手册中没有出现很多警告。它一团糟。)
    • 小步骤:现在找到了 DLL(请参阅更新的问题),但启动失败并显示“无法实例化 .Net 对象 [Unwrapped, QI for IDispatch] [0x80004002] 不支持此类接口”。可能还有其他任何地方都没有提到的警告:COM 接口的可见性。关于这个问题的任何提示?
    猜你喜欢
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多