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:
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
?
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.
Un DLL ne peut pas être accessible depuis un serveur Linux/Apache. Par conséquent, le projet a été abandonné.
J'ai eu le même problème et j'ai corrigé quelques étapes:
C:\Windows\system32\regsvr32 xwizards.dll
(exemple)é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 :)