У меня есть проект, который должен получить доступ к 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:
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. Поэтому проект был снижен.
У меня была та же проблема, и я исправил некоторые шаги:
C:\Windows\system32>regsvr32 xwizards.dll
(пример) теперь напишите в свой PHP-код:
try { $dll = new COM('<theNameOfDllFile>.<NameOfTheClass>'); //without extension '.dll' for theNameOfDllFile $dll->Function(); } catch(Exception $e){ echo 'error: ' . $e->getMessage(), "\n";}
Теперь, если вы знаете, как управлять классом и функцией вашей DLL, все идет хорошо, однако на экране не должно появляться никакого массажа ошибок
Если я не был ясен, дайте мне знать, и я сделаю все возможное в следующий раз 🙂