web-dev-qa-db-fra.com

Utilisant un DLL Avec PHP pour les nuls

J'ai un projet qui doit accéder à un DLL avec PHP. Le serveur est une machine Windows et le serveur Apache est fourni par XAMPP.

Je lis plusieurs réponses sur le web comme

Voici comment j'appelle le DLL dans HTA/Javascript:

<object style="display:none" id="SOME_ID" classid="clsid:SOME_CLASS_ID" codebase="./somePath.dll"></object>

Quelqu'un a-t-il un exemple de travail?

Voici ce que j'ai essayé jusqu'à présent en PHP:

$obj = new COM('pathTo.dll');

Informations sur la DLL:

  1. Compilé avec Delphi
  2. C'est (bien sûr) fait maison
  3. J'obtiens l'erreur suivante the DllRegister Server entry point was not found lorsque j'essaie d'enregistrer le DLL avec regsvr32

Peut-il être utilisé sans l'enregistrer avec regsvr32?

15
David Laberge

Lorsque vous créez votre fichier DLL, vous devez utiliser un fichier de définition de module . Il contiendra quelque chose de similaire à ceci:

;
;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

Cette définition permet à regsvr32 de trouver le point d’entrée DllRegisterServer.

Une autre option que vous pouvez essayer consiste à passer le drapeau/n à regsvr32.

Regsvr32 [/ u] [/ n] [/ i [: cmdline]] nomdll

/ u - Annuler l'enregistrement du serveur

/ i - Appelez DllInstall en lui passant une option facultative [cmdline]; lorsqu'il est utilisé avec/u appelle désinstallation dll

/ n - n'appelle pas DllRegisterServer; cette option doit être utilisée avec/i

/ s - silencieux; n'afficher aucun message (ajouté avec Windows XP et Windows Vista)

En fin de compte, avant d'essayer de faire fonctionner une DLL avec PHP, vous devez vous assurer que votre DLL fonctionne en général.

12
Jeremy Harris

Un DLL ne peut pas être accessible depuis un serveur Linux/Apache. Par conséquent, le projet a été abandonné.

3
David Laberge

J'ai eu le même problème et j'ai corrigé quelques étapes:

  1. ouvrez la ligne de commande en droit administrateur (windows + r + type 'cmd') écrivez le chemin PATH où vous êtes votre fichier dll
    C:\Windows\system32\regsvr32 xwizards.dll (exemple)
    une fenêtre apparaît avec "DLLRegisterServer success"
  2. vérifiez votre phpinfo () si vous êtes com_dotnet extension
  3. écrivez maintenant dans votre code PHP:

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

    Maintenant, si vous savez comment gérer la classe et la fonction de votre dll ça va, mais aucun message d'erreur ne devrait apparaître sur votre écran


Si je n'étais pas clair, faites le moi savoir et je ferai de mon mieux la prochaine fois :)

0