IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Utilisation d'une DLL sous PHP avec objet COM


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Utilisation d'une DLL sous PHP avec objet COM
    Bonjour !

    J'ai un "petit" soucis pour utiliser une dll en PHP. J'ai essayé plusieurs solutions mais rien de bien efficace.
    La dernière en date est celle avec les objets COM.
    Voici le code que j'ai pour l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $str_to_crypt = "toto";
    $str_crypt = '';
     
    $NewCom = new COM("DynamicWrapper");
    $NewCom->Register("dllapi.dll", "APICcrypterMem2", "i=spss", "f=s", "r=l");
    $NewCom->APICcrypterMem2($str_to_crypt, $str_crypt, 'Master', 'C:\\Cles');
    J'ai bien entendu intégré à mon environnement la dll concernant le DynamicWrapper.
    Mon soucis est qu'à l'exécution du script, j'obtiens l'erreur suivante :
    Fatal error: Uncaught exception 'com_exception' with message 'Error [0x80070057] Paramètre incorrect. ' in C:\Documents and Settings\Administrateur\Bureau\PHP\s_crypt.php:10 Stack trace: #0 C:\Documents and Settings\Administrateur\Bureau\PHP\s_crypt.php(10): com->APICcrypterMem2($str_to_crypt, '', 'Master', 'C:\Cles') #1 {main} thrown in C:\Documents and Settings\Administrateur\Bureau\PHP\s_crypt.php on line 10
    Je pense que le soucis viens de la variable de type pointeur. Sinon pourquoi utiliser une dll ? Tout simplement car cette dll nous est fourni par un organisme indépendant et l'on a obligation de s'en servir pour notre application full web.
    Étant donné qu'il s'agit d'un intranet, une install sur les postes clients ne pose évidemment aucun soucis.

    Voici les 2 sources sur lesquelles je me suis basé pour mon code :
    http://freenet-homepage.de/gborn/WSH...SHDynaCall.htm
    http://www.php.net/manual/fr/ref.w32api.php

    Help !

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 126
    Points : 149
    Points
    149
    Par défaut
    Bonjour,

    Manifestement, un des paramètres n'est pas du type attendu.
    Aurais-tu l'IDL non permettant de savoir quels type sonts attendus pour les paramètres de APICcrypterMem2 ?

    En tout état de cause, il serait mieux d'avoir une variable par chaque paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $str_to_crypt = "toto";
    $str_crypt = '';
    $a = "Master";
    $b = "C:\\Cles";
     
    $NewCom = new COM("DynamicWrapper");
    $NewCom->Register("dllapi.dll", "APICcrypterMem2", "i=spss", "f=s", "r=l");
    $NewCom->APICcrypterMem2($str_to_crypt, $str_crypt, $a, $b);
    A.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Oups j'ai oublié de le mettre, le voici :
    long APICcrypterMem2(char* donnees,char** resultat, char* Username, char* keyFolderPath,char* fieldto,char* fieldcc,char* fieldbcc);

    Les 3 derniers paramètres sont optionnels.

    Pour ce qui est des variables, pour l'instant je fais de simples tests afin de récupérer qqch. Quand ça marchera (si ça marche 1 jour) ça sera plus propre.

    C'est la variable de type pointeur qui merde. De toute façon si je met un mauvais type ça me fait littéralement planter Apache.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 126
    Points : 149
    Points
    149
    Par défaut
    Merci.

    En fait, le second paramètre attend un char**. Maintenant, ce que tu déclares dépendrait tout de même de la définition du paramètre dans l'IDL (est-il [out] ou [out, retval] par exemple).

    Si on part sur l'hypothèse [out] :

    Peux-tu tester cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $str_to_crypt = "toto";
    $str_crypt = "";
    $a = "Master";
    $b = "C:\\Cles";
     
    $NewCom = new COM("DynamicWrapper");
    $NewCom->Register("dllapi.dll", "APICcrypterMem2", "i=spss", "f=s", "r=l");
    $NewCom->APICcrypterMem2($str_to_crypt, &$str_crypt, $a, $b);
    Tiens-moi au courant.
    A.

    PS : le résultat peut-il être un tableau ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Merci de ta réponse.
    J'avais déjà testé le passage de paramètre par référence que tu suggères, sans succès, toujours la même erreur.

    Pour la définition du paramètre, en réalité je ne dispose que de l'entête de la fonction APICcrypterMem2, donc je ne sais pas.

    La petite précision que je peux apporter est que les données à crypter ($str_to_crypt) sont passées sous forme d’un char* aux fonctions. Le résultat est reçu dans un pointeur ($str_crypt) qui sera allouée par les fonctions.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    J'ai toujours besoin de votre aide.

Discussions similaires

  1. Utilisation d'une DLL sous visual studio 2008
    Par MacCallahan dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 01/12/2013, 13h10
  2. Utilisation d'une DLL Visual Studio avec MinGW
    Par kouillo dans le forum Visual C++
    Réponses: 1
    Dernier message: 06/08/2012, 10h49
  3. utilisation d'une DLL sous java (DLL/Com)
    Par thouraya dans le forum Général Java
    Réponses: 0
    Dernier message: 07/06/2012, 17h04
  4. Utilisation d'une DLL sous Matlab
    Par lince102 dans le forum MATLAB
    Réponses: 2
    Dernier message: 20/02/2008, 09h51
  5. Utilisation d'une Dll sous Visual C++
    Par Hokagge dans le forum MFC
    Réponses: 3
    Dernier message: 11/01/2006, 14h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo