代码之家  ›  专栏  ›  技术社区  ›  Arlen Beiler

PHP和COM帮助

  •  2
  • Arlen Beiler  · 技术社区  · 16 年前

    在PHP中,与另一个进程通信的最佳方式是什么?

    更新:使用Windows,PHP5,调用COM程序集,可能需要也可能不需要COM,我真的不在乎。

    更新:我正在尝试将命令从php发送到ascom(一个控制程序)。我主要需要执行方法和传递小参数。我还需要能够从中获得信息。

    3 回复  |  直到 16 年前
        1
  •  4
  •   willw    16 年前

    我使用PHP非常广泛,使用我们的库中用C++构建的COM对象,在Windows 2003上用Apache作为Web服务器。它已经运行了大约五年了。

    您可以在PHP中直接实例化和使用COM对象。看看这里给出的Ascom摄像机接口 http://ascom-standards.org/Standards/Index.htm ,我希望它工作得很好;类似这样:

          $camera = new COM('ManufacturerName.Camera'); // COM class name made up
          $camera.NumX = 200;
          $camera.NumY = 200;
          $camera.BinX = 1;
          // Set more properties... then, having set $duration and $light:
          $camera.StartExposure( $duration, $light );
          // etc
    

    也就是说,您可以按照预期的方式使用属性和方法。实际的COM类名将出现在仪器的文档中。您可以在制造商提供给您的任何示例代码中找到它。

    如果您在Web进程中使用它,请注意,每次服务HTTP请求时都必须重新实例化COM对象,然后重新连接到仪器。

    尝试一下,你可能会对它的直截了当感到惊喜。

        2
  •  2
  •   Byron Whitlock    16 年前

    您最好的选择可能是编写一个包装器,用C或C++封装COM组件。使用它的最简单方法是基于命令行。

    ASCOM.exe focuser position 是否确定焦点的位置。

    ASCOM.exe focuser move 25 会移动Focuser,但在移动前不会返回。

    确保您正在处理与此有关的多用户问题!如果有10个人试图移动仪器,你会遇到问题。

    编辑

    在PHP中,使用 system() exec() 命令。你应该使用 系统() 因为它会一直阻塞直到命令完成。

    $pos = system("ASCOM.exe focuser position") 把位置放在 $pos 变量。记住,ascom.exe是您创建的一个程序,用于获取这些命令行参数并将它们转换为适当的COM调用。

    阅读这篇关于 COM wrapper in C# . 如果您喜欢使用C++,请尝试 this article. 最后,如果你对这些语言中的任何一种感到不舒服,你可以 access COM objects in powershell 很容易。

        3
  •  0
  •   Phil Rykoff    16 年前

    Ascom提供什么样的接口?做了谷歌搜索,但找到了几个程序。

    推荐文章