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 :

Dll Delphi paramétré avec valeur de retour


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 915
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 915
    Par défaut Dll Delphi paramétré avec valeur de retour
    Bonjour,

    Je ne savais pas trop si je devais poster ma demande dans le forum Windev ou Delphi.

    J'ai fait des test sur les dll delphi 4.0 et pour cela j'ai fait un dll qui me retourne un integer

    Voici le code de la dll

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function Couleur():integer;
    BEGIN { PRINCIPALE }
             Couleur := 10;
    END; // FUNCTION Couleur
    et lorsque je l'appelle de windev j'ai bien 10 en valeur de retour.

    Voici le code de windev

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    HInstDllDelphi = ChargeDLL("borlndmm.dll")
    hInstDll = ChargeDLL("FPEE1_DLL_AccesRehau.dll")
    SI hInstDll = 0 ALORS
    	Erreur(ErreurInfo())
    SINON
    	Trace(AppelDLL32("FPEE1_DLL_AccesRehau.dll","Couleur"))
    FIN
    Je voudrais faire une dll qui me retourne une chaine de caractère donc logiquement je fais ce qui suit..

    Code de la DLL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function Couleur():ShortString;
    BEGIN { PRINCIPALE }
             Couleur := 'Test';
    END; // FUNCTION Couleur
    Mais lorsque je lance mon appel dans windev j'ai le message suivant :

    Erreur à la ligne 59 du traitement Clic sur BTN_Bouton2.
    Vous avez appelé la fonction AppelDLL32.
    La fonction 'Couleur' de la DLL FPEE1_DLL_AccesRehau.dll a provoqué une erreur d'exécution.

    Informations techniques

    Projet : FPEE1_EDITION_PROFILS_COMPLEMENTAIRES

    Dump de l'erreur du module <WD140VM.DLL> <14.00Qa>.

    - Appel WL :
    Traitement de <FEN_Principale.BTN_Bouton2>, ligne <59>, thread <0>
    Fonction <AppelDLL32>, n° de syntaxe <0>

    - Niveau : erreur fatale (EL_FATAL)

    - Code erreur : 2805

    - Code erreur WD55 : 0

    - Pas de code d'erreur système

    - Pas de message d'erreur système

    - Que s'est-il passé ?
    La fonction 'Couleur' de la DLL FPEE1_DLL_AccesRehau.dll a provoqué une erreur d'exécution.

    - Infos de debug :

    Détails techniques :

    Module : FPEE1_DLL_AccesRehau.dll
    Adresse de base : 01790000
    Erreur système : Access violation (GPF)
    EIP = 017D2C27
    OS : Windows XP ou .NET Service Pack 3(5.1.2600)
    Registres :

    EIP = 017D2C27 EBP = 0012ED48
    EAX = EF82EF82 EBX = 0033BFD0
    ECX = 017D2C18 EDX = 25FF3768
    ESI = 017D2C30 EDI = EF82EF82

    Pile des appels :

    [FPEE1_DLL_AccesRehau.dll (01790000)] 017D2C27

    Fonction (0,18)

    - Infos attachées :
    EIT_PILEWL :
    Clic sur BTN_Bouton2 (FEN_Principale.BTN_Bouton2), ligne 59
    EIT_COMPOSANT :

    EIT_DATEHEURE : 30/06/2009 10:43:00

    - Identifiant dans le .err : 2805


    Assistance

    - Vérifiez les paramètres passés
    - Vérifiez que le type des paramètres passés correspond bien à ceux attendus
    - Vérifiez que les valeurs nulles sont bien tolérées par la fonction appelée
    - Vérifiez les appels précédents à d'autres fonctions de cette DLL (ils ont pu la mettre dans un état instable)
    - Si le problème persiste, contactez le fournisseur de la DLL où se trouve la fonction.

    Comment je dois faire pour avoir une valeur de retour de type chaine

    Et après ça je vais faire une Dll paramétrer du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function Couleur(NomCouleur : string):ShortString;
    BEGIN { PRINCIPALE }
    if NomCouleur  = 'BL'
    then Couleur := 'BLANC'
    else Couleur := 'Inconnu';
    END; // FUNCTION Couleur
    Pouvez vous m'aider??

    Je vous remercie d'avance..

  2. #2
    Membre Expert Avatar de klbsjpolp
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 065
    Par défaut
    Salut!

    Une valeur de retour d'une fonction de dll ne peut être qu'entière. Tu peux renvoyer un pointeur de chaine ou mieux, le passer par adresse à la fonction. Je ne connais pas la syntaxe delphi mais c'est une limitation dans tout les langages.

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Février 2003
    Messages
    4 341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 4 341
    Par défaut
    Salut, ne pas oublier ceci
    Citation Envoyé par Aide Delphi
    { Remarque importante concernant la gestion de mémoire des DLL : ShareMem doit être
    la première unité de la clause USES de votre bibliothèque ET de votre projet
    (sélectionnez Projet-Voir source) si votre DLL exporte des procédures ou des
    fonctions qui passent des chaînes comme paramètres ou résultats de fonctions.
    Ceci s'applique à toutes les chaînes passées de et vers votre DLL - même celles
    qui sont imbriquées dans des enregistrements et classes. ShareMem est l'unité d'interface pour
    le gestionnaire de mémoire partagée BORLNDMM.DLL, qui doit être déployé avec
    vos DLLs. Pour éviter d'utiliser BORLNDMM.DLL, passez les informations de chaînes
    avec des paramètres PChar ou ShortString.}
    Bref, dans ton code ta procedure attends une "String" Delphi, c'est peut-être ça le problème !

Discussions similaires

  1. Problème avec valeur de retour d'une fonction
    Par ouranos21 dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 20/01/2009, 08h52
  2. Exception et méthode avec valeur de retour
    Par gmonta31 dans le forum Langage
    Réponses: 2
    Dernier message: 10/10/2008, 12h54
  3. JFrame avec valeur de retour comme InputDialog
    Par jliog dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 29/04/2008, 18h14
  4. SELECT avec valeur de retour soumises a condition
    Par Clorish dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/12/2007, 21h26

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