【发布时间】:2011-03-11 12:11:03
【问题描述】:
我遇到的困难是使用 PHP 的 com() 和 dotnet() 类来实例化对象的正确参数语法,以加载 .net 程序集、Windows 系统应用程序和通常 MS Office 应用程序之外的组件。如果成功创建,则使用对象在这里不是问题。
谁能解释每个参数的每个部分对两个类的含义,以及我如何找到任何应用程序、组件或程序集的正确调用语法? PHP究竟可以或不能加载什么,如果可以,如何加载?如何找出哪些系统组件和类是可见的并且可以通过 com() 和 dotnet() 获得?对于调用程序集,我假设 /windows/assembly/gacxx 文件夹中列出的任何内容都可以在这里使用是不正确的?
我正在尝试更深入地研究连接或使用 Windows 系统应用程序、组件和程序集。例如,使用“System.Windows.Forms”程序集。在查看了 PHP's manual on the topic 包括代码示例之后,对我来说并没有变得更清楚。由于 PHP 的错误,我无法获得正确的语法,无法找到指定的文件,或者只是完全失败而没有解释。事件查看器中未显示任何相关事件以提示应用程序崩溃或拒绝访问。
我安装了 .net 4 框架。这些是我当前的 PHP 设置...
编译:--enable-com-dotnet
[com_dotnet]
- COM 支持 => 已启用
- DCOM 支持 => 禁用
- .Net 支持 => 已启用
指令 => 局部值 => 主值
- com.allow_dcom => 0 => 0
- com.autoregister_casesensitive => 无价值 => 无价值
- com.autoregister_typelib => 1 => 1
- com.autoregister_verbose => 1 => 1
- com.code_page => 无价值 => 无价值
- com.typelib_file => 无价值 => 无价值
到目前为止,我只成功处理了三个案例。所有其他情况均失败,包括尝试使用其他 mscorlib 类...
我看到'System.Windows.Forms' 只是坐在 /windows/assembly 文件夹中嘲弄我。 $forms = new DOTNET('System.Windows.Forms', 'Form'); 失败,即使使用了完整的程序集字符串。我找错地方了吗?我是否应该从 .net 中处理此问题并创建自己的程序集以允许我从 PHP 动态调用其他人?
注意:使用 win32api PHP 扩展是正确的,因为它是一个死项目,我希望不再依赖其他人的宠物项目扩展。
编辑: COM 问题已基本解决。在注册表中,我能够找到 com 支持的软件和系统组件的列表,并使用它们的 clsid 创建几个 com 对象。不过仍然不确定如何创建 DOTNET 对象。
【问题讨论】: