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

Delphi Discussion :

Appel dll un peu particulier


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Par défaut Appel dll un peu particulier
    Bonjour

    Ce qui suit va faire crier les puristes car un dll n a pas vocation a etre mie en resources mais ça m evite une install et protege mon appli...dumoins si j'y parviens...

    J ai une dll en resource dans mon exe.
    dans le on create,j extrais cette ressource et la save dans c:\windows (ça ne fonctionne pas avec le repertoire system !) sous un nom generé à chaque ouverture de l appli de maniere aleatoire.(je l efface dans le close query)

    j aimerai savoir comment appeller cette dll.

    quand j apelle une dll j utilise, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    NomDLL = '123456.dll';
     
    function nom_fonction(): Integer; stdcall; external NomDLL;
    mais il m est impossible de declarer cela en debut de code...puisque je ne connais pas le nom de ma dll...et que de toutes les façons, au premier lancement elle n existe pas, quelque soit son mon...

    Auriez vous une piste ?

    Merci de votre aide

    stephane

  2. #2
    Invité
    Invité(e)
    Par défaut
    Je pense qu'il est possible d'avoir le nom de ta DLL dans une virable (globale ?) que tu modifies quand tu exporte ta DLL sur le disque.
    Ensuite pour l'appel, il fraudais utiliser cette variable.

    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
    procedure Dll_Test(Cnx : TSQLConnection;);
    var
       MaDLL : THandle;
       MaFonction : procedure (Cnx : TSQLConnection); stdcall;
    begin
       MaDLL := LoadLibrary(PChar(NomDLL));
       if MaDLL = 0 then
          raise Exception.Create('Le fichier ' + NomDLL + ' est introuvable.');
     
       @MaFonction := GetProcAddress(MaDLL, 'MaFonction');
       if @MaFonction = nil then
          raise Exception.Create('Le fichier ' + NomDLL + ' ne contient pas la fonction demandée.');
     
       try
          MaFonction(Cnx);
       finally
          FreeLibrary(MaDLL);
       end;
    end;

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Par défaut
    merci d avoir pris le temps de me repondre.

    Je comprends l idee mais ai un pb en declarant ma fonction à la place de
    MaFonction : procedure (Cnx : TSQLConnection); stdcall;
    ma fonction dans la dll est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function answer(): Integer; stdcall;
    begin
      Result := random(20);
    end;
    donc je procede ainsi mais cela ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaFonction : function answer(): Integer; stdcall;
    de plus answer n est pas reconnu dans le try...

    Donc comment declarer ma fonction ?

    merci de ton aide

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 493
    Par défaut
    je vois pas bien le probleme ?

    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
     
    type
       TanswerFunc = function  : integer; stdcall;
     var
       dllHandle : cardinal;
       answerFunc : TanswerFunc;
       ires : integer;
     begin
       dllHandle := LoadLibrary('ma.dll') ;
       if dllHandle <> 0 then
       begin
         @answerFunc := GetProcAddress(dllHandle, 'answer') ;
         if Assigned (answerFunc) then
           Ires := answerFunc; //call the function
         else
           ShowMessage('"answer" function not found') ;
         FreeLibrary(dllHandle) ;
       end   else   begin
         ShowMessage('ma.dll not found / not loaded') ;
       end;
     end;

  5. #5
    Invité
    Invité(e)
    Par défaut
    Tu ne dois pas nommer ta function dans l'appel de la DLL mais seulement la déclarer avec ces paramètres

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Par défaut
    Effectivement je nommais la fonction dans son appel...

    Merci c est parfait, cela repond parfaitement à mes attentes.

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

Discussions similaires

  1. appel a un programme exterieur un peu particulier
    Par KINENVEU dans le forum Général Python
    Réponses: 6
    Dernier message: 06/04/2009, 03h27
  2. Api coredll.dll wifi appel natif "Un peu perdu"
    Par sid_la_chouette dans le forum Mobiles
    Réponses: 0
    Dernier message: 17/12/2007, 07h02
  3. Appel d'un callback sur un event un peu particulier
    Par Jim_Nastiq dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 04/06/2007, 16h40
  4. [MFC]ActiveX + appel DLL
    Par Xeron dans le forum MFC
    Réponses: 4
    Dernier message: 22/06/2005, 16h39
  5. Réponses: 2
    Dernier message: 05/01/2004, 11h23

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