Подтвердить что ты не робот

Использование DLL с PHP для чайников

У меня есть проект, который должен получить доступ к 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:

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

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

4b9b3361

Ответ 1

Когда вы создаете свой 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

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

/s - Беззвучно; не отображаются окна сообщений (добавлены в Windows XP и Windows Vista)

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

Ответ 2

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

Ответ 3

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

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

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

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


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