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

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

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

  • Использовать DLL в PHP?
  • php-связь с dll?
  • вызов dll через php
  • http://ca.php.net/manual/en/class.com.php
  • http://ca2.php.net/manual/en/book.w32api.php
  • http://www.talkphp.com/absolute-beginners/3340-php-how-load-com-dll-file.html

Вот как я называю 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 ?

Когда вы создаете свой 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 DLL, вы должны быть уверены, что ваша DLL работает в целом.

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

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

  1. откройте командную строку справа от администратора (windows + r + type 'cmd), напишите PATH, где вы – ваш DLL-файл:
    C:\Windows\system32>regsvr32 xwizards.dll (пример)
    появляется окно с «успехом DLLRegisterServer»
  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, все идет хорошо, однако на экране не должно появляться никакого массажа ошибок

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