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 :

Comment utiliser une variable globale de dll ?


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Par défaut Comment utiliser une variable globale de dll ?
    J'ai une dll qui contient une variable exportée que je dois initialiser.
    Quelqu'un sait-il comment faire ?
    Merci

  2. #2
    Membre émérite
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut
    Il y a plusieurs démarches.

    Si la variable n'a à être initialisée qu'au démarrage, il suffit d'utiliser une syntaxe du type :

    Il est ausi possible d'effectuer des initialisations entre le "begin" et le "end." de la dll.

    Sinon, et sans que ce soit exclusif, il faut définir une fonction d'affectation.

    Voilà un code de test pour la dll :

    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
    library DllExportVariable;
     
     
    uses
      SysUtils,
      Classes;
     
    {$R *.res}
     
    var I : Integer;
     
    function GetValue : Integer;stdcall;
     begin
      Result := I;
     end;
     
    procedure SetValue(AValue : Integer);stdcall;
     begin
      I := AValue;
     end;
     
    exports GetValue,SetValue;
     
    begin
     I := 324;
    end.
    Et un exemple de code à insérer dans l'unité de la fiche, pour l'utilisation (fiche avec un bouton Button1).

    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
    implementation
     
    {$R *.dfm}
     
    function  GetValue : Integer; stdcall; external 'DllExportVariable.dll' name 'GetValue';
    procedure SetValue(AValue : Integer); stdcall; external 'DllExportVariable.dll' name 'SetValue';
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     ShowMessage(IntToStr(GetValue));
     SetValue(-3251);
     ShowMessage(IntToStr(GetValue));
    end;
     
    end.

  3. #3
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Par défaut
    Je ne peux pas toucher à la dll car elle est fournie avec un matériel.
    Je sais juste qu'elle contient une variable de type booléen que je dois absolument mettre à true (elle est à false par défaut) pour utiliser certaines fonctionnalités de mon matériel.
    Donc une autre idée ?

  4. #4
    Membre émérite
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut
    Citation Envoyé par Chamatho Voir le message
    Je ne peux pas toucher à la dll car elle est fournie avec un matériel.
    Tu aurais pu le dire tout de suite, ça m'aurait évité de perdre mon temps...

    Non, pas d'idée. A part peut-être consulter la documentation dudit matériel ?

  5. #5
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Et dans la doc de la dll, il n'y a rien qui explique l'état de cette variable?

  6. #6
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Par défaut
    Citation Envoyé par Linkin Voir le message
    Et dans la doc de la dll, il n'y a rien qui explique l'état de cette variable?
    C'est une variable de type booléen. Suivant sa valeur les fonctions de la dll travaillent différemment. Rien à dire de plus.

    Delphi ne serait-il pas capable de mettre à jour des variables de dll ?

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 933
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 933
    Par défaut
    Citation Envoyé par Chamatho Voir le message
    Delphi ne serait-il pas capable de mettre à jour des variables de dll ?
    S'il n'y a pas de procédure exportée pour initialiser ces variables, aucune chance. Delphi ou tout autres systèmes de développement.

    Récupérer la liste des procédures et fonctions n'est pas compliqué avec Delphi, il suffit de charger la DLL avec LoadLibrary et d'afficher les modules chargés pour avoir une liste exhaustives des fonctions exportées. Mais les paramètres à passer seront toujours manquants.

    Comme l'a dit CapJack, seule la doc peut t'aider.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/02/2009, 07h11
  2. Réponses: 5
    Dernier message: 04/05/2006, 21h02
  3. [sql] comment utiliser une variable global
    Par imedg dans le forum Oracle
    Réponses: 21
    Dernier message: 02/05/2006, 15h21
  4. Comment déclarer une variable globale
    Par davkick dans le forum C
    Réponses: 13
    Dernier message: 20/05/2005, 18h50

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