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 :

[Builder 5] Comment utiliser des fonctions d'une DLL (Delphi) ?


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    D�tails du profil
    Informations personnelles :
    �ge : 45
    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 704
    Par d�faut [Builder 5] Comment utiliser des fonctions d'une DLL (Delphi) ?
    Je d�veloppe principalement en Delphi. Mais, j'ai �t� amen� � cr�er une DLL.
    J'essais de me rappeller mes lointains souvenir de C++, pour faire un petit exe qui fera appel aux fonction de ma DLL. Le but est de s'assurer que ma DLL peut �tre appell�e depuis n'importe quel langage.

    Je suis sous C++Builder 5 Pro, et je coince d�s le d�but pour inclure ma DLL � mon projet. Je pensais qu'un simple #include "MaDLL.dll" suffirait, mais apparemment non.
    J'ai fait une petite recherche dans la FAQ, mais rien sur les DLL.
    J'ai bien trouv� ce post (http://www.developpez.net/forums/sho...&highlight=dll), mais quand j'essais d'inclure le *.lib g�n�r�, j'ai les m�mes erreurs que pour la DLL :
    Caract�re '�' (0x0) incorrect
    Caract�re '@' (0x0) incorrect
    ...
    Si quelqu'un pouvait m'indiquer la marche � suivre ...
    Merci d'avance.

    L'urgent est fait, l'impossible est en cours, pour les miracles pr�voir un d�lai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"�crivez dans un fran�ais correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  2. #2
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Il faut inclure le ou les en-t�tes (.) contenant les d�clarations des fonctions / classes de ta biblioth�que.
    Il faut ajouter le fichier biblioth�que (.lib) dans les options de l'�diteur de liens.

  3. #3
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    D�tails du profil
    Informations personnelles :
    �ge : 45
    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 704
    Par d�faut
    Citation Envoy� par Laurent Gomila
    Il faut inclure le ou les en-t�tes (.) contenant les d�clarations des fonctions / classes de ta biblioth�que.
    C'est � dire ?
    Je n'ai plus fait de C++ depuis 2002.

    Citation Envoy� par Laurent Gomila
    Il faut ajouter le fichier biblioth�que (.lib) dans les options de l'�diteur de liens.
    Ca ne change rien. J'ai les m�mes erreurs.
    L'urgent est fait, l'impossible est en cours, pour les miracles pr�voir un d�lai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"�crivez dans un fran�ais correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  4. #4
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Hmm... Est-ce que tu as des en-t�tes (.h) qui vont avec ta biblioth�que ? Si ce n'est pas le cas il faudra proc�der autrement (charger la DLL dynamiquement).

  5. #5
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    D�tails du profil
    Informations personnelles :
    �ge : 45
    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 704
    Par d�faut
    Citation Envoy� par Laurent Gomila
    Hmm... Est-ce que tu as des en-t�tes (.h) qui vont avec ta biblioth�que ?
    Non. Ca n'existe pas en Delphi. Ca doit �tre propre au C++.

    Citation Envoy� par Laurent Gomila
    Si ce n'est pas le cas il faudra proc�der autrement (charger la DLL dynamiquement).
    Bon, j'ai essay� :
    - Dans le *.h :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    typedef void (WINAPI *DLL_InitDemandeExtDLL) (int HandleApp, Pointer pSession, PChar sSociete, PChar sSite, PChar sLibelleAtelier, PChar sUtilisateur);
    typedef LongBool (WINAPI *DLL_AffDemandeExt) (int Mode, PChar sNumDemande, int nQuantite, Pointer pInfoDemande);
    - Dans le *.cpp :
    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
       HMODULE hDLL = LoadLibrary("DemandeExt.dll");
       if(!hDLL)
       {
          ShowMessage("Erreur :  LoadLibrary !");
          return;
       }
     
       DLL_InitDemandeExtDLL pfn_InitDemandeExtDLL;
       DLL_AffDemandeExt pfn_AffDemandeExt;
     
       pfn_InitDemandeExtDLL = (DLL_InitDemandeExtDLL)GetProcAddress(hDLL, "InitDemandeExtDLL");
       if(!pfn_InitDemandeExtDLL)
       {
          ShowMessage("Erreur :  GetProcAdress InitDemandeExtDLL !");
          return;
       }
       pfn_AffDemandeExt = (DLL_AffDemandeExt)GetProcAddress(hDLL, "AffDemandeExt");
       if(!pfn_AffDemandeExt)
       {
          ShowMessage("Erreur :  GetProcAdress AffDemandeExt !");
          return;
       }
     
       pfn_InitDemandeExtDLL(0, &Session, "", "", "", "");
       pfn_AffDemandeExt(1, "", 1, NULL);
     
       FreeLibrary(hDLL);
    J'ai encore des erreurs, mais � l'ex�cution. Je pense que �a viens de ma DLL, qui ne respecte pas les standards Windows (trop pure Delphi).
    Est-ce que le code semble juste (du point de vue du C++) ?
    L'urgent est fait, l'impossible est en cours, pour les miracles pr�voir un d�lai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"�crivez dans un fran�ais correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  6. #6
    Membre confirm�
    Inscrit en
    Avril 2007
    Messages
    187
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Par d�faut
    Salut,
    J'ai d�j� fait une telle chose (appeler une dll delphi depuis un programme C++)

    Tu dois tou d'abord �viter les type string dans delphi et utiliser plutot le type PChar, en plus dans C++ tu dois d�clarer un pointeur sur type de la fonction qui a la meme signature que celle que t'as en delphi, la charger et enfin l'appeler.

  7. #7
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    D�tails du profil
    Informations personnelles :
    �ge : 45
    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 704
    Par d�faut
    Citation Envoy� par bouzaidi
    Tu dois tou d'abord �viter les type string dans delphi et utiliser plutot le type PChar
    Effectivement. Je l'avais lu aussi. J'y ai fait attention.
    Par contre, pour les entiers et les bool�ens, quels sont les types possibles � utiliser ?

    Voici les prototypes en Delphi :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
       procedure InitDemandeExtDLL(HandleApp: HWND; pSession: Pointer; const sSociete, sSite, sLibelleAtelier, sUtilisateur: PChar);   stdcall;
       function AffDemandeExt(Mode: TMode; sNumDemande: PChar; nQuantite: Longint; pInfoDmd: PInfoDemande = nil): LongBool;   stdcall;
    Citation Envoy� par bouzaidi
    en plus dans C++ tu dois d�clarer un pointeur sur type de la fonction qui a la meme signature que celle que t'as en delphi, la charger et enfin l'appeler.
    C'est pas ce que j'ai essay� de faire dans le code post� au-dessus (http://www.developpez.net/forums/sho...61&postcount=5) ?
    J'ai oubli� des choses ?
    L'urgent est fait, l'impossible est en cours, pour les miracles pr�voir un d�lai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"�crivez dans un fran�ais correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

Discussions similaires

  1. Utiliser des fonctions d'une DLL C++
    Par ced001 dans le forum Delphi
    R�ponses: 2
    Dernier message: 09/02/2007, 16h03
  2. comment utiliser les fonctions d'une dll
    Par sebled dans le forum MFC
    R�ponses: 3
    Dernier message: 24/02/2006, 16h59
  3. utilisation des fonctions d'une dll
    Par jackk dans le forum C++
    R�ponses: 14
    Dernier message: 15/06/2005, 16h50
  4. R�ponses: 14
    Dernier message: 15/01/2004, 01h15

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