Использовать DLL в PHP?

Я не собираюсь врать. Я не совсем знаком с объектами Windows и COM. Вот почему я здесь. Во-первых, возможно ли получить доступ к DLL из PHP-скрипта, запущенного Apache? В моем путешествии по интернетам я считаю, что у меня есть 2 варианта:

  1. скомпилируйте dll как расширение для PHP. (я не сделал эту dll)
  2. доступ к DLL как COM-объект, который является тем, что он предназначен для любого пути.

Поэтому я беру подход COM.

try{ $com = new COM('WHAT_GOES_HERE'); } catch(Exception $e){ echo 'error: ' . $e->getMessage(), "\n"; } 

Как мне узнать, что будет в строку инициализации? есть ли программа типа com viewer, которую я мог / должен был использовать, чтобы узнать это? документация, связанная с этой DLL, похоже, не указывает, какие строки я должен использовать для инициализации, но очень подробно разбираюсь в том, какие потоки доступны, и всевозможные забавные вещи. просто должен пройти этот начальный горб. Пожалуйста помоги!

WHAT_GOES_HERE – это идентификатор ProgID, Class ID или Moniker, зарегистрированный в операционной системе.

Каждый из них может изменяться для той же DLL, зарегистрированной на разных машинах. Существует несколько способов найти, что такое ProgID / CLSID / Moniker зарегистрированной dll. Вы можете искать в Интернете «dll debugger», «dll export», «dll inspect», и вы увидите несколько решений, а также способы показать, какие функции экспортируют dll, чтобы вы могли их использовать.

Проще всего, вы можете просто зарегистрировать dll с помощью Regsvr32.exe и найти регистр Window в regedit.exe для имени dll, вам может потребоваться выполнить поиск несколько раз, пока не найдете ключ в \HKEY_CLASSES_ROOT\ , который является ProgID.

Команда dcomcnfg.exe показывает много информации о COM-объектах.

Если у вас есть Visual Studio, может оказаться полезным OLE / COM Object Viewer (oleview.exe).

Вы можете запускать dll-функции (из dll, которые не являются расширениями php) с winbinder. http://winbinder.org/ Использование просто. Вам нужно скачать php_winbinder.dll и включить его в php.ini в качестве расширения. В скрипте php вы должны использовать что-то похожее:

 function callDll($func, $param = "") { static $dll = null; static $funcAddr = null; if ($dll === null) { $dll = wb_load_library(<DLL PATH AND FILENAME>); } $funcAddr = wb_get_function_address($func, $dll); if ($param != "") { return wb_call_function($funcAddr,array(mb_convert_encoding($param,"UTF-16LE"))); } else { return wb_call_function($funcAddr); } } 

Вы можете просто создать оболочку вокруг вашей основной DLL и использовать эту оболочку как расширение в вашем PHP. Некоторые бесплатные инструменты, такие как SWIG, могут автоматически создавать эту оболочку, получая заголовок ваших функций dll. Я сам использую этот подход, и это было легко и надежно.