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 Delphi Discussion :

Fonction dans une bpl qui retourne un String (avec string en argument)


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Par défaut Fonction dans une bpl qui retourne un String (avec string en argument)
    Salut,


    Ca fait un bout de temps que je suis en train de m'enerver sur un bout de code qui ne fonctionne pas.


    Je voudrait simplment faire une fonction dans une BPL qui traite une chaine de caractère et retourne le resultat.

    J'ai lu la FAQ à propos des DLL et je pense que le principe doit être le meme.

    Je ne sais pas si le probleme viens de l'appel ou de la bpl elle meme. J'ai des erreurs 'rtl100.bpl' ou runtime error...

    Quelque pourrait-il me donner un exemple ? Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Pourrais tu montrer ton code, cela serait plus simple pour voir d'où vient ton problème.

    Pour ma part j'utilise les BPL en tant que PlugIn pour mes logiciels et je fait appel à des fonctions + ou - complexe avec des retours divers (Type record, class, string, etc...).
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Par défaut
    Pour ma part j'utilise les BPL en tant que PlugIn pour mes logiciels et je fait appel à des fonctions + ou - complexe avec des retours divers (Type record, class, string, etc...).
    C'est à peu pres ce que je veux faire. C'est pour utiliser des méthodes de cryptage par exemple. Je veux pouvoir mettre une bpl dans le repertoire applicatif sans changer l'exe. Ex : tel client veux un cryptage MD5, je lui mets la bpl nommée crypt.bpl par exemple, et il le prog l'utilise de maniere transparente, mieux encore, je mets toutes mes méthodes de cryptage dans la bpl, et la configuration indique quelle méthode utiliser etc ...

    J'ai créé pour apprendre a me servr des bpl, un projet avec deux Edits (edtIn et edtOut , l'un pour lentrée et l'autre pour la sortie du résultat).

    Appel dans le projet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    interface
     
    uses
      ShareMem, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
     
     
    function MD5(S : String; Buffer: pChar): Cardinal; stdcall; external 'kmd5.bpl';
     
    ***
     
    procedure TForm1.btnGoClick(Sender: TObject);
    var 
      Taille: Cardinal; 
      Buf: pChar; 
    begin 
     
      //On récupère la taille du message 
      Taille := MD5(edtin.Text, nil);
     
      //Puis on alloue la mémoire nécessaire 
      GetMem(Buf, Taille); 
     
      //On récupère/traite le résultat 
      //MD5(Buf, Taille);
     
      //Et enfin on peut libérer la mémoire 
      FreeMem(Buf);


    Dans la bpl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    unit ExportsKmd5;
     
    interface
     
    uses MD5Api, SysUtils;
     
    function ComputeMD5(S : String) : String ;
     
    function MD5(S : String; Buffer: pChar): Cardinal; stdcall;
     
     
     
    // -- Export the functions.
    exports
        MD5;
     
    implementation
     
     
    function ComputeMD5(S : String) : String ;
    var
        Str : String;
    begin
        Result := MD5Api.MD5(S);
    end;
     
     
     
    function MD5(S : String; Buffer: pChar): Cardinal; stdcall;
    var
      msg: String;
    begin 
      //On récupère le résultat. Notez que le type string n'est pas proscrit en interne 
      msg := ComputeMD5(S);
     
      Result := Length(msg); 
     
      //Si le buffer a été alloué, on y effectue une copie de la chaîne 
      if Buffer <> nil then 
        StrCopy(Buffer, pAnsiChar(msg));
    end;
     
    end.
    Voila ou j'en suis... :s

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Je fonctionne différemment de toi car je charge dynamiquement les packages.

    [edit]
    J'ai peut être une solution mais à tester

    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Type 
      TMD5 = function (S : String; Buffer: pChar): Cardinal; stdcall;
    var
      PackHandle : integer;
      GetMD5 : TMD5;
      Resultat : Cardinal;
    begin
      PackHandle := LoadPackage('Le_chemin_de_ton_package.bpl');
      GetMD5 := GetProcAddress(PackHandle,'MD5');
      Resultat := GetMD5(edtin.Text, nil);
    end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Par défaut
    Ok, et comment fait-on si l'on veut charger la bpl statiquement dans ce cas ?

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Voir plus haut j'ai édité mon message
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    une question m'intrique dans ce sujet: pourquoi utiliser un bpl plutot qu'une dll?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Par défaut
    une question m'intrique dans ce sujet: pourquoi utiliser un bpl plutot qu'une dll?
    En effet, je pourrait utiliser une dll dans ce cas précis. D'ailleurs le fonctionnement serait le meme.

    les bpl offent une facilité quant a la gestion des objets.

    Dans mon cas, je cherche à me familiariser avec les bpl afin d'avoir une modularite

  9. #9
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    Citation Envoyé par lejert Voir le message
    (...)les bpl offent une facilité quant a la gestion des objets.(...)
    Tu connais un endroit ou je pourrai savoir quelles sont les differences avec une dll? ou si tu peu m'expliquer grosso modo les principales differences?

    Merci

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 146
    Par défaut
    Tu connais un endroit ou je pourrai savoir quelles sont les differences avec une dll? ou si tu peu m'expliquer grosso modo les principales differences?
    Bien que cela sorte du sujet de mon post, voici des liens :

    La FAQ : Comment utiliser des objets avec des dll :http://delphi.developpez.com/faq/?pa...tentredlletexe

    Pour les bpl, je ne suis qu'au début de leur utilisation, mais je sais que les BPL te permettent de charger plus facilment des classes dynamiquement, tu peux chercher du cote des fonctions GetClass et LoadPackage


    Il y a aussi cet article http://dn.codegear.com/article/27178

  11. #11
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    hmmm ca m'a l'air vraiment tres interessant. Je me pencherai plus en profonduer la dessus des que j'aurai un peu de temps.

    Un GRAND merci a vous deux

Discussions similaires

  1. Fonction d'une DLL qui retourne plusieur valeur
    Par vtk37 dans le forum Débuter
    Réponses: 9
    Dernier message: 27/05/2009, 10h01
  2. Fonction dans une boucle qui ne renvoie rien
    Par blueice dans le forum Langage
    Réponses: 9
    Dernier message: 16/08/2008, 08h46
  3. Réponses: 3
    Dernier message: 20/04/2008, 21h06
  4. [Excel VBA]fonction dans une cellule qui modifie une autre cellule
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/01/2007, 17h43
  5. Réponses: 10
    Dernier message: 07/01/2007, 12h03

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