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

WinDev Discussion :

[WD12] récupération d'un Char* d'une dll


Sujet :

WinDev

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2008
    Messages : 111
    Points : 50
    Points
    50
    Par défaut [WD12] récupération d'un Char* d'une dll
    Bonjour à tous,

    j'ai créé une dll en C++ dans laquelle j'exporte des fonctions que réutilise dans Windev.
    J'ai une fonstion pour laquelle je dois passer un char*. Qu'est que je dois passer en paramètre dans windev lors de l'appelle de la fonction. J'ai essayé plusieurs type mais ça plante...

    Le but étant de récupérer une chaîne de caractère.

    Merci, d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Freelance
    Inscrit en
    Avril 2003
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Avril 2003
    Messages : 393
    Points : 492
    Points
    492
    Par défaut
    T as essayé avec une chaine ou chaine fixe en passant l adresse de la chaine ?

    Vince
    http://vroy1.free.fr

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2008
    Messages : 111
    Points : 50
    Points
    50
    Par défaut
    Comment est-ce que tu passe l'adresse de la chaîne dans Windev ?

  4. #4
    Membre confirmé
    Profil pro
    Freelance
    Inscrit en
    Avril 2003
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Avril 2003
    Messages : 393
    Points : 492
    Points
    492
    Par défaut
    TaChaine est une chaine = "hello"

    AppelDLL32 ("ta_dll.dll","ta_fonction_exportee",&TaChaine)

    A+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2008
    Messages : 111
    Points : 50
    Points
    50
    Par défaut
    ça plante aussi...

  6. #6
    Membre confirmé
    Profil pro
    Freelance
    Inscrit en
    Avril 2003
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Avril 2003
    Messages : 393
    Points : 492
    Points
    492
    Par défaut
    Avec "ca plante", je ne vais pas trop pouvoir t aider
    Par exemple ce code ne plantera pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // Ton code C
    void _stdcall TaFonctionExportee (char* tonParam)
    {
          char temp [50]={""};
          strcpy (temp,tonParam);
          MessageBox (0,temp,"",0);
    }
     
    // Dans Windev
    test est une chaîne = "HELLO"
    iddll est un entier = ChargeDLL ("C:\ta_dll.dll")
    AppelDLL32("C:\ta_dll.dll","TaFonctionExportee",&test)
    DéchargeDLL(iddll)
    Il faut essayer de voir dans ton code C ou cela plante
    a+

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2008
    Messages : 111
    Points : 50
    Points
    50
    Par défaut
    Mon programme plante au moment de récupérer le résultat.
    result est mon char * que je passe en paramètre.

    C++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MessageBox(NULL,result,"Error: ", MB_OK);
    	 if(vb.get_value(result)==SNMP_CLASS_INVALID)
    	 {
    		return -80;
    	 }
     MessageBox(NULL,result,"Error: ", MB_OK);
    windev

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    sResulTest est une chaîne
    hInst = ChargeDLL("P:\Projets C\rad studio\SNMP\DLL SNMP\Debug\DLLSnmp.dll")
    SI hInst = 0 ALORS
    	TitreSuivant("Erreur")
    	Erreur(ErreurInfo())
    FIN
    nResultat=AppelDLL32("P:\Projets C\rad studio\SNMP\DLL SNMP\Debug\DLLSnmp.dll","getMibOPAQUE","1.3.6.1.4.1.5.1.0",&sResulTest)
    DéchargeDLL(hInst)
    le reste fonctionne mais j'ai des problème au niveau de la récupération du résultat.

  8. #8
    Membre confirmé
    Profil pro
    Freelance
    Inscrit en
    Avril 2003
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Avril 2003
    Messages : 393
    Points : 492
    Points
    492
    Par défaut
    T as essaye de faire un test avec un executable en C++ pour voir la difference ?

  9. #9
    Membre expert
    Avatar de Emmanuel Lecoester
    Profil pro
    Inscrit en
    Février 2003
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2003
    Messages : 1 493
    Points : 3 266
    Points
    3 266
    Par défaut
    une chaine asciiz dans Windev pour gérer le nul char terminated.

    asciiz = char *

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2008
    Messages : 111
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par elecoest Voir le message
    une chaine asciiz dans Windev pour gérer le nul char terminated.

    asciiz = char *
    J'avais déjà essayer avec une chaîne asciiz, ça ne plante pas (c'est déjà ça )
    Mais la méthode get_value() me renvoie une erreur comme quoi le type de la variable passer en paramètre n'est pas bon.
    Voici des information sur la méthode sur laquelle je passe mon char*.
    http://www.agentpp.com/doc_snmp++3.x/classVb.html

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2008
    Messages : 111
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par VincentRoy Voir le message
    T as essaye de faire un test avec un executable en C++ pour voir la difference ?
    non pas encore... Je vais m'y atteler.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2008
    Messages : 111
    Points : 50
    Points
    50
    Par défaut
    Voici ma fonction de test qui fonctionne :
    C++:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void _stdcall test(char* chaine)
    {
    	chaine="test qui fonctionne";
    }
    WinDev
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    hInst est un entier
    szResulTest est une chaîne ASCIIZ sur 20
    hInst = ChargeDLL("P:\Projets C\rad studio\SNMP\DLL SNMP\Debug\DLLSnmp.dll")
    SI hInst = 0 ALORS
    	TitreSuivant("Erreur")
    	Erreur(ErreurInfo())
    FIN
     
    AppelDLL32("P:\Projets C\rad studio\SNMP\DLL SNMP\Debug\DLLSnmp.dll","test",&szResulTest)
     
    Info("Resultat: "+szResulTest)
     
    DéchargeDLL(hInst)
    La valeur affiché sous windev correspond à ma phrase

    Je vais continuer en sens avec get_value()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [D6] Lire sous D6 le type (char **) d'une DLL en C++
    Par nikoko34 dans le forum Langage
    Réponses: 6
    Dernier message: 10/10/2008, 17h14
  2. Récupération variable globale d'une DLL
    Par bleach1234 dans le forum C
    Réponses: 9
    Dernier message: 12/09/2007, 16h46
  3. Réponses: 4
    Dernier message: 05/06/2007, 10h03
  4. [VB.NET] Problem de récupération de variable avec une DLL
    Par ludovic85 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 19/01/2005, 11h37
  5. Traitement d'un char* renvoyé par une DLL en C++
    Par LuluTchab dans le forum Langage
    Réponses: 4
    Dernier message: 22/03/2003, 21h48

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