Где я застрял - это правильный синтаксис параметров для создания экземпляра объекта с использованием классов PHP com()
и dotnet()
для загрузки сборок .net, системных приложений Windows и компонентов, выходящих за рамки обычных приложений MS Office. При успешном создании работа с объектами здесь не проблема.
Может кто-нибудь объяснить, что означает каждая часть каждого параметра для обоих классов, и как я могу узнать правильный синтаксис вызова для любого приложения, компонента или сборки? Что именно может или не может загрузить PHP, и если может, то как? Как мне узнать, какие системные компоненты и классы видимы и могут быть доступны через com () и dotnet ()? При вызове сборок я не прав, если предположить, что здесь можно использовать что-либо из перечисленного в папках / windows / assembly / gacxx?
Я пытаюсь углубиться в подключение или использование системных приложений, компонентов и сборок Windows. Например, используя сборку System.Windows.Forms. После просмотра руководства PHP по теме , включая примеры кода, для меня ничего не понятно. Из-за ошибок PHP я не могу правильно понять синтаксис, не могу найти указанные файлы, или просто не получаю объяснения. Связанные события не отображаются в средстве просмотра событий, которые бы указывали на сбой приложения или отказ в доступе.
У меня установлен .net 4 framework. Это мои текущие настройки PHP ...
скомпилировано: --enable-com-dotnet
[com_dotnet]
- Поддержка COM => включена
- Поддержка DCOM => отключена
- .Net support => включено
Директива => Локальное значение => Основное значение
- 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 ...
<?php
$scripting = new COM("MSScriptControl.ScriptControl");
$scriping_host = new COM("WScript.Shell');
$stack = new DOTNET("mscorlib", "System.Collections.Stack");
?>
Я вижу, что «System.Windows.Forms» просто сидит там в папке / windows / assembly, дразнящей меня. $forms = new DOTNET('System.Windows.Forms', 'Form');
завершается ошибкой, даже если используется полная строка сборки. Я смотрю не в том месте? Должен ли я вместо этого подойти к этому изнутри .net и создать свою собственную сборку, чтобы позволить мне динамически вызывать других из PHP?
Примечание: вместо этого используется PHP-расширение win32api, так как это мертвый проект, и я надеюсь отойти от зависимости от расширений других любимых проектов.
Редактировать: Проблема с COM в основном решена. В реестре я смог найти список поддерживаемых com-компонентов программного обеспечения и системы и создать несколько com-объектов, используя их clsid. Тем не менее, пока точно не знаете, как создавать объекты DOTNET.