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

  1. #1
    Membre averti

    Homme Profil pro
    Inscrit en
    mars 2002
    Messages
    0
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2002
    Messages : 0
    Points : 309
    Points
    309
    Par défaut DLL développée en C++ Builder pour être utilisée avec Delphi
    J'ai développé une DLL en C++ qui doit être utilisée avec Delphi 5.0

    Cell-ci fonctionne très bien avec un programme C++, mais je n'arrive pas à l'utiliser avec Delphi.

    Ma DLL est comme suit:

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    //--------------------------------------------------------------------------- 
    #include <vcl.h> 
    #include "FloatDLL.h" 
    #pragma hdrstop 
    //--------------------------------------------------------------------------- 
    extern __declspec(dllexport) void Float(char ,float); 
     
    void Float(char mnemonic[4],float *Reponse) 
    { 
    *Reponse = *(float *) mnemonic; 
    } 
    //--------------------------------------------------------------------------- 
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) 
    { 
    return 1; 
    } 
    //--------------------------------------------------------------------------- 
     
    Cette fonction utilise *(float*) pour convertir une valeur binaire en point flottant, ça fonctionne. 
     
     
    Le programme en C++ qui la fait fonctionner est comme suit: 
     
    //--------------------------------------------------------------------------- 
    #include <vcl.h> 
    #pragma hdrstop 
     
    #include "FloatDLL.h" 
    #include "Conv_FloatUnit.h" 
    //--------------------------------------------------------------------------- 
    #pragma package(smart_init) 
    #pragma resource "*.dfm" 
    TForm1 *Form1; 
    //--------------------------------------------------------------------------- 
    __fastcall TForm1::TForm1(TComponent* Owner) 
    : TForm(Owner) 
    { 
    } 
    //--------------------------------------------------------------------------- 
    void __fastcall TForm1::Button1Click(TObject *Sender) 
    { 
    char mnemonic[4] = "00“B"; 
    float Reponse =-999.9; 
    Float(mnemonic,&Reponse); 
    } 
    //--------------------------------------------------------------------------- 
    void __fastcall TForm1::Button2Click(TObject *Sender) 
    { 
    Close(); 
    } 
    //---------------------------------------------------------------------------


    Pour appeler cette fonction en Delphi j'utilise le code suivant:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Procedure Float(mnemonic: Str4; ReponsePtr: Pointer); external 'FloatDLL.DLL'; 
     
    Float(DataStr[II],ReponsePtr);
    Ça ne fonctionne pas !

    J'ai aussi aluoté à la fonction d'appel stdcall

    Procedure Float(mnemonic: Str4; ReponsePtr: Pointer); stdcall external 'FloatDLL.DLL';

    Ça ne fonctionne pas plus !


    J'apprécierais avoie de l'aide pour résoudre mon problême

    [Balise [code] rajoutée par gRRosminet]
    [Pensez-y vous-même à l'avenir. Merci.]

  2. #2
    Membre averti

    Homme Profil pro
    Inscrit en
    mars 2002
    Messages
    0
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2002
    Messages : 0
    Points : 309
    Points
    309
    Par défaut
    Salut,
    l'entête de la déclaration de la fonction doit être la suivante
    extern "C" __declspec(dllexport) __stdcall void Float(char * mnemonic,float *Reponse);

    la fonction exportée devient alors Float et non _Float

    en outre en delphi avec une DLL "C" il est préférable d'utiliser les PChar,
    -- > Appel delphi

    Procedure Float(mnemonic: Pchar; totorSingle);stdcall ;external 'FloatDLL.DLL';


    var
    ReponsePtr: Single;
    totorChar;
    begin
    totor:='00“B';
    Float(totor,@ReponsePtr);
    Label2.Caption:=FloatToStr(ReponsePtr);
    end;

    Salutations

  3. #3
    Membre averti

    Homme Profil pro
    Inscrit en
    mars 2002
    Messages
    0
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2002
    Messages : 0
    Points : 309
    Points
    309
    Par défaut
    J'ai fait exactement ce selon tes recommandations et ça fonctionne très bien. Je te remercie infiniment de ton aide.

    Jacquelin Rouleau

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 07/08/2012, 16h01
  2. Batteries Included : mures pour être utilisées ?
    Par james-mi dans le forum Caml
    Réponses: 14
    Dernier message: 20/04/2009, 19h31
  3. Réponses: 2
    Dernier message: 07/01/2009, 18h03

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