Использование DLL с PHP для чайников - PullRequest
15 голосов
/ 21 декабря 2011

У меня есть проект, которому нужен доступ к DLL с помощью PHP. Сервер является машиной Windows, а сервер Apache предоставляется XAMPP.

Я читаю несколько ответов в Интернете, как

Вот как я вызываю DLL в HTA / Javascript:

<object style="display:none" id="SOME_ID" classid="clsid:SOME_CLASS_ID" codebase="./somePath.dll"></object>

У кого-нибудь есть рабочий пример?

Вот что я пробовал в PHP:

$obj = new COM('pathTo.dll');

Информация о DLL:

  1. Скомпилировано с использованием Delphi
  2. Это (конечно) самодельный
  3. Я получаю следующую ошибку the DllRegister Server entry point was not found при попытке зарегистрировать DLL с regsvr32

Можно ли использовать без регистрации с regsvr32?

Ответы [ 3 ]

13 голосов
/ 12 января 2012

Когда вы создаете файл DLL, вам нужно использовать файл определения модуля .Он будет содержать нечто похожее на это:

;
;contains the list of functions that are being exported from this DLL
;

DESCRIPTION     "Simple COM object"

EXPORTS
                DllGetClassObject       PRIVATE
                DllCanUnloadNow         PRIVATE
                DllRegisterServer       PRIVATE
                DllUnregisterServer     PRIVATE

Это определение позволяет regsvr32 найти точку входа DllRegisterServer.

Другой вариант, который вы можете попробовать, - передать флаг / n в regsvr32.

Regsvr32 [/ u] [/ n] [/ i [: cmdline]] dllname

/ u - отменить регистрацию сервера

/ i - вызвать DllInstall, передав ему необязательный [cmdline];при использовании с / u вызывает dll uninstall

/ n - не вызывать DllRegisterServer;эта опция должна использоваться с / i

/ s - Silent;не отображать окна сообщений (добавлено в Windows XP и Windows Vista)

В конечном итоге, прежде чем пытаться заставить DLL работать с PHP, необходимо убедиться, что ваша DLL работает в целом.

1 голос
/ 18 января 2012

Не удается получить доступ к DLL с сервера Linux / Apache. Поэтому проект был отброшен.

0 голосов
/ 25 января 2017

У меня была такая же проблема, и я исправил несколько шагов:

  1. откройте командную строку в праве администратора (windows + r + тип 'cmd') напишите PATH, где вы находитесь ваш файл DLL:
    C:\Windows\system32\regsvr32 xwizards.dll (это пример)
    появляется окно с "DLLRegisterServer success"
  2. проверьте ваш phpinfo (), если вы com_dotnet расширение
  3. теперь напишите в свой PHP-код:

        try    {
      $dll = new COM('<theNameOfDllFile>.<NameOfTheClass>'); //without extension '.dll' for theNameOfDllFile
      $dll->Function(); 
      } catch(Exception $e){
        echo 'error: ' . $e->getMessage(), "\n";}
    

    Теперь, если вы знаете, как управлять классом и функцией dll, все в порядке, но без ошибокна вашем экране должен появиться массаж


Если я не уверен, дайте мне знать, и я сделаю все возможное в следующий раз:)

...