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

C++Builder Discussion :

Utilisation dynamique d'une DLL


Sujet :

C++Builder

  1. #1
    Membre éclairé
    Homme Profil pro
    Chercheur génie électrique
    Inscrit en
    Mai 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur génie électrique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 263
    Par défaut Utilisation dynamique d'une DLL
    Bonsoir,
    j'ai essayé les codes de LFE sur ce forum pour utiliser dynamiquement une 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
    27
    28
    29
    30
    31
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #pragma package(smart_init)
    #pragma resource "*.dfm"
     
    TForm1 *Form1;
     
    typedef int (__stdcall *MYDLLFUNC)(void);
     
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
    {
    }
     
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        HINSTANCE hinstDLL;
        MYDLLFUNC ImpFuncDLL;
        int iRet;
     
        if ((hinstDLL=LoadLibrary("Project1.dll"))) {
            ImpFuncDLL = GetProcAddress(hinstDLL, "LoadForm");
            if (ImpFuncDLL) {
                iRet = ImpFuncDLL();
            }
            FreeLibrary(hinstDLL);
        }
    }
    Voici ma question: j'ai une DLL comprenant une fonction:
    double TestValeur(double InVal, int Type);

    Comment je peux charger dynamiquement et utiliser cette fonction?
    Merci par avance

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Salut, est-ce que tu as essayer qqchose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        HINSTANCE hinstDLL;
        MYDLLFUNC ImpFuncDLL;
        int iRet;
     
        if ((hinstDLL=LoadLibrary("Project1.dll"))) {
            ImpFuncDLL = GetProcAddress(hinstDLL, "TestValeur");
            if (ImpFuncDLL) {
                iRet = ImpFuncDLL(1, 2);
            }
            FreeLibrary(hinstDLL);
        }
    }

  3. #3
    Membre éclairé
    Homme Profil pro
    Chercheur génie électrique
    Inscrit en
    Mai 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur génie électrique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 263
    Par défaut
    Oui, cela ne marche pas:
    incompatible à la déclaration. J'ai même modifié la déclaration, il y a toujours erreurs. Je pense que c'est la déclaration que je ne maitrise pas.

  4. #4
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Par défaut
    J'aurais une question par rapport a ca, ceraine DLL sont fournis avec le .h, faut il l'inclure dans les en tete dans le cas d'une utilisation dynamique de la dll corespondante ?

  5. #5
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Poste ton code au lieu de poster l'exemple que tu as trouvé !

    La déclaration du pointeur de fonction devrait ressembler à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef double (*MYDLLFUNC)(double, int);
    Obtient tu un pointeur valide ? tu ne nous le dit pas !

  6. #6
    Membre éclairé
    Homme Profil pro
    Chercheur génie électrique
    Inscrit en
    Mai 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur génie électrique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 263
    Par défaut
    Citation Envoyé par Lucien63 Voir le message
    Poste ton code au lieu de poster l'exemple que tu as trouvé !

    La déclaration du pointeur de fonction devrait ressembler à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef double (*MYDLLFUNC)(double, int);
    Obtient tu un pointeur valide ? tu ne nous le dit pas !

    Merci pour ta réponse. J'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef double (*MYDLLFUNC)(double, int);
    La DLL a bien été chargée, mais ImpFuncDLL est toujours NULL. J'ai bien mis le nom de ma fonction!

Discussions similaires

  1. [Aide] Appel dynamique d'une DLL ?
    Par QAYS dans le forum Delphi
    Réponses: 1
    Dernier message: 30/05/2007, 14h31
  2. Réponses: 16
    Dernier message: 06/08/2006, 23h45
  3. [D7] - Allocation dynamique dans une DLL
    Par david_chardonnet dans le forum Delphi
    Réponses: 6
    Dernier message: 05/07/2006, 15h28
  4. Utilisation externe d'une Dll créée sous VB6
    Par Dertron dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 03/04/2006, 21h19
  5. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52

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