Page 1 sur 1

Problème d'appel de fonction d'une dll

Posté : 29 mai 2012, 09:28
par Daemon80000
Bonjour, je débute en php et j'ai besoin de ce langage pour développer ma dll.
J'ai créer une dll écrite en VB6 sous Seven avec des fonctions qui incrémente et décrémente une variable.
En référençant cette dll dans un autre programme VB6 avec une fenêtre d'application contenant un bouton et un textbox(pour tester), j'arrive à incrémenter et décrémenter une valeur.
Maintenant pour référencer la dll en php il faut que je puisse d'abord l'enregistrer dans le système avec regsvr32 "Emplacement de la dll", aucun problème et l'enregistrement a été fait correctement.

Je suis allé sur le site : http://php.net/manual/es/class.com.php

Pour référencer une dll en php il faut utilisé les objets COM, j'ai donc pris ce bout de code dans ma page php :

Code : Tout sélectionner

<?php $MADLL = new COM('Project1.Class1') or die ("Impossible d'instancier la dll"); echo "dll chargé avec succés"; echo $MADLL->Increment(5) ?>
Project1 étant le nom de ma dll VB6 et class1 étant la classe utilisé en VB6 pour compiler mon programme.
Si la dll n'a pas put être appelée il me renvoi "Impossible d'instancier la dll" mais je n'ai pas ce soucis la, il me renvoi bien comme quoi il arrive bien a appeler la dll et j'ai le deuxième echo qui s'affiche mais le problème vient de la ligne d'après.

Il me renvoi l'erreur suivante :

Fatal error: Call to undefined method com::Increment(5) in C:\wamp\www\Test_dll\test.php on line 4

Apparemment il n'arrive pas à appeler la méthode "Increment" de ma dll.
Quelqu'un aurait une solution?
Merci.

Re: Problème d'appel de fonction d'une dll

Posté : 30 mai 2012, 10:07
par Daemon80000
Personne pour me répondre?

Re: Problème d'appel de fonction d'une dll

Posté : 30 mai 2012, 14:19
par Akirami
Le truc c'est que je vois pas comment tu peux utiliser un dll avec php ???

Re: Problème d'appel de fonction d'une dll

Posté : 30 mai 2012, 15:34
par xTG
Le truc c'est que je vois pas comment tu peux utiliser un dll avec php ???
Bah c'est possible, donc message assez inutile... On ne répond pas quand on ne peut apporter d'aide, sinon cela s'apparente à un pseudo-flood non ? ;)

Concernant le souci initial, le code m'a l'air on ne peut plus correct. :(
A tout hasard, essaies de faire un var_dump($MADLL) pour voir ce que ça te retourne (bien que j'ai un doute, certains objets de PHP ne retournent rien, PDO par exemple).

Re: Problème d'appel de fonction d'une dll

Posté : 08 juin 2012, 09:58
par Daemon80000
Bonjour et merci pour ta réponse.
j'ai mis var_dump($MADLL); dans mon code mais lorsque j’exécute avec wamp il me renvoi la page web "Erreur de chargement de la page , le connexion a été réinitialisé".
Là j'avoue ne pas comprendre.......

Re: Problème d'appel de fonction d'une dll

Posté : 08 juin 2012, 10:21
par Daemon80000
J'ai essayer avec com_print_typeinfo($MADLL) et j'obtiens à peu près la même chose que sur ce lien la : php-avance/php-dll-t262984.html

J'obtiens ceci :

dll chargé avec succésclass _Class1 { /* GUID={FD2268A9-B6A8-3083-B12E-00D946D54A30} */ /* DISPID=1610612736 */ function QueryInterface( /* VT_PTR [26] [in] --> ? [29] */ &$riid, /* VT_PTR [26] [out] --> VT_PTR [26] */ &$ppvObj ) { } /* DISPID=1610612737 */ /* VT_UI4 [19] */ function AddRef( ) { } /* DISPID=1610612738 */ /* VT_UI4 [19] */ function Release( ) { } /* DISPID=1610678272 */ function GetTypeInfoCount( /* VT_PTR [26] [out] --> VT_UINT [23] */ &$pctinfo ) { } /* DISPID=1610678273 */ function GetTypeInfo( /* VT_UINT [23] [in] */ $itinfo, /* VT_UI4 [19] [in] */ $lcid, /* VT_PTR [26] [out] --> VT_PTR [26] */ &$pptinfo ) { } /* DISPID=1610678274 */ function GetIDsOfNames( /* VT_PTR [26] [in] --> ? [29] */ &$riid, /* VT_PTR [26] [in] --> VT_PTR [26] */ &$rgszNames, /* VT_UINT [23] [in] */ $cNames, /* VT_UI4 [19] [in] */ $lcid, /* VT_PTR [26] [out] --> VT_I4 [3] */ &$rgdispid ) { } /* DISPID=1610678275 */ function Invoke( /* VT_I4 [3] [in] */ $dispidMember, /* VT_PTR [26] [in] --> ? [29] */ &$riid, /* VT_UI4 [19] [in] */ $lcid, /* VT_UI2 [18] [in] */ $wFlags, /* VT_PTR [26] [in] --> ? [29] */ &$pdispparams, /* VT_PTR [26] [out] --> VT_VARIANT [12] */ &$pvarResult, /* VT_PTR [26] [out] --> ? [29] */ &$pexcepinfo, /* VT_PTR [26] [out] --> VT_UINT [23] */ &$puArgErr ) { } }

Après comment faire pour appeler une fonction.....

Re: Problème d'appel de fonction d'une dll

Posté : 08 juin 2012, 11:31
par Mazarini
Sauf erreur de ma part, la méthode increment() n'existe pas. Enfin elle n’apparaît pas dans ton affichage de la classe.

Essayes une autre fonction de la classe qui apparait ?
Vérifie que la méthode est publique ?

Re: Problème d'appel de fonction d'une dll

Posté : 08 juin 2012, 14:15
par Daemon80000
Bonjour, j'ai essayé de mettre une autre méthode à la place de "Incremente" mais il me renvoi l'erreur suivante :

Fatal error: Uncaught exception 'com_exception' with message ' in C:\wamp\www\Test_dll\test.php on line 4
com_exception: Error [0x80020003] Membre introuvable. in C:\wamp\www\Test_dll\test.php on line 4

De plus ma méthode Incremente est bien publique :

Public Sub Incremente(ByRef var1 As Integer)
var1 = var1 + 1
End Sub

J'ai essayé avec une autre méthode :

Public Function Decrement(ByRef var As Integer)
var = var - 1
End Function

Mais toujours le même soucis -> Fatal error: Call to undefined method com::Incremente() in C:\wamp\www\Test_dll\test.php on line 4

Encore merci pour ta réponse.

Re: Problème d'appel de fonction d'une dll

Posté : 11 juin 2012, 09:20
par Daemon80000
Personne ne peut m'aider?