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 :

Comment appeler une dll VB6 sous delphi


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Septembre 2006
    Messages : 279
    Points : 99
    Points
    99
    Par défaut Comment appeler une dll VB6 sous delphi
    Bonsoir;
    J'ai crée une dll sous vb qui contient une methode pour afficher un fenetre, je veux appeler cette dll sous delphi afin de récupérer cette fenetre VB alors comment je peux l'appeler sous delphi ?est ce que je dois la placer dans le dossier de mon projet delphi ??

    Merci

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 676
    Points : 7 077
    Points
    7 077
    Par défaut
    Il faut placer ta DLL, là où ton exe pourra la trouver. Soit à côté de l'exe, soit dans un répertoire connu comme C:\Windows\system32\

    Sinon, dans ton code, juste avant implementation, place la définition de ta fonction de ta DLL.
    Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure MaFonctionDansLaDLL(Parametre: TypeDuParametre);   stdcall;   external 'MaDLL.dll';

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Septembre 2006
    Messages : 279
    Points : 99
    Points
    99
    Par défaut
    Bonjour;
    Merci pour la réponse.
    J'ai ajouté ma dll comme tu m'as indiqué mais lors de l'exécution de mon application j'ai eu le message d'erreur suivant:
    "le point d'entrée de la procédure maFonctionDansDll est introuvable dans la bibliothèque de liaisons dynamique nomDeMaDll.dll"

    Merci de m'exprimer pourquoi j'ai eu ce message

    Sans oublier que je veux appeler cette librairie lors du clic sur un bouton delphi alors c'est quoi l'instruction que je dois mettre ?

  4. #4
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    en statique la dll doit etre a la racine du programme delphi ou accessible dans le PATH (c:\windows, c:\windows\system32) par exemple.

    si ta DLL n'est pas placé dans l'un de ces repertoires, il faut faire une liaison dynamique via LoadLibrary(), GetProcAddress(), CloseHandle()...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Septembre 2006
    Messages : 279
    Points : 99
    Points
    99
    Par défaut
    Bonjour;
    Voila j'ai utilisé le code suivant :
    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
     
    type
    MyDll = procedure (X: string);  stdcall;
    var
         Hbar: Thandle;
         myLib: MyDll;
     
     
    begin
     
     Hbar := LoadLibrary('MaDll.DLL');
        if Hbar >= 32 then // success
       begin
         @myLib := GetProcAddress(Hbar, 'maFonctionDll');
    {sachant que maFonctionDll dans ma MaDll a un seul paramètre de type string}
         myLib('msg');
         FreeLibrary(Hbar);
       end
       else
         MessageDlg('Error: could not find MaDll.DLL', mtError, [mbOk], 0)
    mais ca me génère une erreur "Access violation at address 00000000. Read of address 00000000"

    Merci

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ Zanoubya, regardes un peux cet exemple :

    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
     
    Utilisation :
    - il suffit de dériver la classe TLoadDll comme ci-dessous :
     
        // Objet permettant d'accéder à Exemple.DLL
      TLoadDLLExemple = class(TLoadDll)
      protected
        procedure FreeLibrary; override;
        procedure LoadLibrary; override;
      Public
        GetFunction1: Function: boolean; stdcall ;
        GetFunction2: Function: boolean; stdcall ;
        constructor Create(AOwner: TComponent); override;
      end;
     
    implementation
     
    { TLoadDLLExemple }
     
    constructor TLoadDLLExemple.Create(AOwner: TComponent);
    begin
      inherited;
      if not (csDesigning in ComponentState) then
        // chargement de la DLL
        Dll:= 'EXEMPLE.DLL';
    end;
     
    procedure TLoadDLLExemple.FreeLibrary;
    begin
      @GetFunction1:= nil;
      @GetFunction1:= nil;
      inherited;
    end;
     
    procedure TLoadDLLExemple.LoadLibrary;
    begin
      inherited;
      // fonction1 et fonction2 sont les noms dans la DLL
      @GetFunction1:= GetFunction('fonction1');
      @GetFunction1:= GetFunction('fonction2');
    end;
    @+,

    Cincap

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Septembre 2006
    Messages : 279
    Points : 99
    Points
    99
    Par défaut
    ça marche merci à tous

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

Discussions similaires

  1. Utiliser une DLL Matlab sous Delphi
    Par airefrais dans le forum Langage
    Réponses: 4
    Dernier message: 24/07/2009, 10h16
  2. Comment exécuter une DLL écrite en Delphi avec RunDLL32 ?
    Par Pedro dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 09/01/2008, 19h03
  3. Comment importer une table SQL sous Delphi ?
    Par Yeldra dans le forum Débuter
    Réponses: 3
    Dernier message: 28/10/2007, 10h37
  4. Comment appeler une fonction JavaScript depuis Delphi ?
    Par Alfred12 dans le forum Web & réseau
    Réponses: 4
    Dernier message: 17/06/2005, 18h15
  5. Comment créer une dll Win32 sous Delphi ?
    Par Mickey.jet dans le forum Langage
    Réponses: 8
    Dernier message: 16/06/2005, 15h38

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