Korzystanie z DLL z PHP dla manekinów
Mam projekt, który potrzebuje dostępu do DLL z PHP. Serwer jest maszyną z systemem Windows, a serwer Apache jest dostarczany przez XAMPP.
Czytam wiele odpowiedzi w sieci jak
- używać DLL w PHP?
- komunikacja php z dll?
- wywołanie dll przez 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
Oto jak Nazywam DLL w HTA
/ Javascript
:
<object style="display:none" id="SOME_ID" classid="clsid:SOME_CLASS_ID" codebase="./somePath.dll"></object>
Czy ktoś ma działający przykład?
Oto co próbowałem do tej pory w PHP:
$obj = new COM('pathTo.dll');
Informacje o DLL:
- skompilowany przy użyciu Delphi
- jest (oczywiście) domowej roboty
- pojawia się następujący błąd
the DllRegister Server entry point was not found
podczas próby zarejestrowania DLL za pomocąregsvr32
Czy można go używać bez rejestracji za pomocą regsvr32
?
3 answers
Podczas tworzenia pliku DLL, musisz użyć pliku definicji modułu . Będzie zawierać coś podobnego do tego:
;
;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
Ta definicja pozwala regsvr32 znaleźć punkt wejścia DllRegisterServer.
Inną opcją, którą możesz spróbować, jest przekazanie flagi / n do regsvr32.
Regsvr32 [/u] [/n] [/i [: cmdline]] dllname
/u - Unregister server
/ I-Call DllInstall przekazując ją jako opcjonalną [cmdline]; gdy jest używana z wywołaniami / u dll uninstall
/ N - nie wywołuje DllRegisterServer; Ta opcja musi być używana z /i
/ s-Silent; nie wyświetla pól wiadomości (dodanych w Windows XP i Windows Vista)
Ostatecznie, zanim spróbujesz zrobić DLL działa z PHP, musisz być pewien, że Twój DLL działa w ogóle.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55
Miałem ten sam problem i naprawiłem kilka kroków:
- otwórz wiersz poleceń po prawej stronie Administratora (windows + R + wpisz 'cmd')
napisz ścieżkę, na której znajduje się Twój plik dll:
C:\Windows\system32\regsvr32 xwizards.dll
(to przykład)
pojawi się okno z "DLLRegisterServer success"
- Sprawdź phpinfo() jeśli jesteś com_dotnet rozszerzenie
-
Teraz wpisz swój kod PHP:
try { $dll = new COM('<theNameOfDllFile>.<NameOfTheClass>'); //without extension '.dll' for theNameOfDllFile $dll->Function(); } catch(Exception $e){ echo 'error: ' . $e->getMessage(), "\n";}
Teraz jeśli wiesz jak zarządzać klasą i funkcją masz dll to dzieje się ok, jednak nie błąd masaż powinien pojawić się na ekranie
Jeśli nie wyraziłem się jasno daj mi znać, a następnym razem postaram się jak najlepiej:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-26 06:10:36
Biblioteka DLL nie może być dostępna z serwera Linux / Apache. W związku z tym projekt został wycofany.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-17 20:56:06