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

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:

  1. skompilowany przy użyciu Delphi
  2. jest (oczywiście) domowej roboty
  3. 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?

Author: Community, 2011-12-21

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.

 15
Author: Jeremy Harris,
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:

  1. 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"
  2. Sprawdź phpinfo() jeśli jesteś com_dotnet rozszerzenie
  3. 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:)

 0
Author: UserHelpNeeding02356,
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.

 -1
Author: David Laberge,
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