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

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

compile the dll as an extension for PHP. (i didn't make this dll) access the DLL as a COM object which is sort of what it's designed for anyways.

Так что я принимаю подход COM.

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

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

Ответы на вопрос(3)

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

Вы можете запускать функции 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);
    }
}

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

Каждый из нихcan изменить на одну и ту же 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).

Ваш ответ на вопрос