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 :

Erreur "l'application n'a pas reussi à s'initialiser correctement"


Sujet :

Delphi

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Points : 55
    Points
    55
    Par défaut Erreur "l'application n'a pas reussi à s'initialiser correctement"
    Bonjour,
    J'ai un projet delphi qui fait appel à une dll écrite en delphi aussi, et quand j'essai de compiler le projet j'ai l'erreur suivante: "l'application n'a pas reussi à s'initialiser correctement(0x0000007b). Cliquez sur Ok pour arrêter l'application." je clique sur ok et j'ai ensuite une fenetre cpu quis'ouvre et un message d'information du type access violation...
    N.B: je note aussi que j'ai le meme message quand j'essai de compiler ma dll, et ceci en générant la DLL.

    Merci de m'aider les amis...

  2. #2
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    tu as du te planter dans ta dll.
    genre un oubli de clause export

    Montre le source de la dll.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Points : 55
    Points
    55
    Par défaut code
    Citation Envoyé par Kaféine
    tu as du te planter dans ta dll.
    genre un oubli de clause export

    Montre le source de la dll.
    Non je n'ai pas oublié la clause export, et voici mon code de ma 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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    library ED_DLL;
    uses
      ShareMem,  Dialogs, SysUtils,
      Classes,
      Windows,
      //unitdll in 'unitdll.pas';
      FM_Main in 'FM_Main.pas',
      FM_Options in 'FM_Options.pas' {F_Options},
      U_Constantes in 'U_Constantes.pas',
      U_OptionsValues in 'U_OptionsValues.pas',
      FM_Params in 'FM_Params.pas' {F_Params},
      FM_About in 'FM_About.pas' {F_About},
      FM_FTP in 'FM_FTP.pas' {F_FTP},
      FM_SFTP in 'FM_SFTP.pas' {F_SFTP},
      FM_Splash in 'FM_Splash.pas' {F_Splash},
      FM_Mail in 'FM_Mail.pas' {F_Mail},
      U_Obligation in 'U_Obligation.pas',
      U_SwapTaux in 'U_SwapTaux.pas',
      U_TCN in 'U_TCN.pas',
      U_PretEmprunt in 'U_PretEmprunt.pas',
      U_ValMob_OLF in 'U_ValMob_OLF.pas',
      U_ObjectTypes in 'U_ObjectTypes.pas',
      U_ObligationConvertible in 'U_ObligationConvertible.pas',
      FM_Recap in 'FM_Recap.pas' {F_Recap},
      U_PJJ in 'U_PJJ.pas',
      U_CFD in 'U_CFD.pas',
      FM_SendTicketsUnitaires in 'FM_SendTicketsUnitaires.pas' {F_SendTicketsUnitaires},
      U_TRS in 'U_TRS.pas',
      U_ValMob_OLF_Sophis in 'U_ValMob_OLF_Sophis.pas',
      U_SwapChange in 'U_SwapChange.pas',
      U_ChangeSpotTerme in 'U_ChangeSpotTerme.pas',
      U_SwiftMT304 in 'U_SwiftMT304.pas',
      U_Tools in 'U_Tools.pas',
      U_CDS in 'U_CDS.pas',
      U_Options_CDS in 'U_Options_CDS.pas',
      U_OptionChange in 'U_OptionChange.pas',
      U_VarSwap in 'U_VarSwap.pas',
      U_OptionOTC in 'U_OptionOTC.pas',
      U_DividendSwap in 'U_DividendSwap.pas',
      U_Outperform in 'U_Outperform.pas',
      U_CapFloor in 'U_CapFloor.pas',
      U_Swaptions   in 'U_Swaptions.pas',
      U_SwapEquities in 'U_SwapEquities.pas';
     
    {$R *.res}
     
      procedure ExportToFileMultiple_NWE(ExportType : TFileType; refcon : String; DestinationType: TDestType;
                                       MajStatuts,choixRepertoire : Boolean;
                                       RepertoireCible : String); stdcall; external 'exportdeals.exe';
     
      procedure ExportToFileUnitaire_NEW(refcon, type_du_deal : String; MajStatuts, choixRepertoire : Boolean;
                                   RepertoireCible: String);  stdcall; external 'exportdeals.exe';
     
      function GetTypeDeal(refcon : string): string; stdcall; external 'exportdeals.exe';
     
     
    procedure ExportToFile(ExportType : TFileType; Listrefcon : TStringList; DestinationType: TDestType;
                           MajStatuts,choixRepertoire : Boolean; RepertoireCible : String;
                           CreerUnitaire : Boolean); stdcall;
    var
      i    : integer;
      type_du_deal : String;
    begin
         for i := 0 to Listrefcon.Count-1 do
         begin
            type_du_deal:= GetTypeDeal(Listrefcon[i]);
            if((type_du_deal='CDS') or (type_du_deal='Swap de change') or (type_du_deal='Change spot')
               or (type_du_deal='Change terme')) then
            begin
               if (not (CreerUnitaire)) then
                  ExportToFileMultiple_NWE(ExportType, Listrefcon[i] , DestinationType, MajStatuts,
                                         choixRepertoire, RepertoireCible)
               else
                  ExportTofileUnitaire_NEW(Listrefcon[i], type_du_deal, MajStatuts,
                                              choixRepertoire, RepertoireCible);
            end
            else if ((type_du_deal='Option listée et future') or (type_du_deal='CFD')
                      or (type_du_deal='TRS')) then
                  ExportToFileMultiple_NWE(ExportType, Listrefcon[i] , DestinationType,
                                           MajStatuts, choixRepertoire, RepertoireCible)
     
            else if ((type_du_deal='TCN') or (type_du_deal='Swaps de taux') or (type_du_deal='Obligation') or
                     (type_du_deal='VarSwap') or (type_du_deal='Obligation convertible') or
                     (type_du_deal='Option sur CDS') or (type_du_deal='Option de Change') or
                     (type_du_deal='Option OTC') or (type_du_deal='Dividend Swap') or (type_du_deal='Outperformance') or
                     (type_du_deal='CapFloor') or (type_du_deal='Equity Swap') or (type_du_deal='Pension JJ')) then
                  ExportTofileUnitaire_NEW(Listrefcon[i], type_du_deal, MajStatuts, choixRepertoire,
                                         RepertoireCible)
            else
                  MessageDlg('Le type du deal n est pas valide', mtError, [mbOk], 0);
        end;
    end;

  4. #4
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Points : 55
    Points
    55
    Par défaut
    en fait j'ai oublie ces dernieres lignes de mon code:

    exports
    ExportToFile;
    begin
    end.

  5. #5
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    salut,

    je vois que tu importes des fonctions de ton executable.
    tu as bien vérifie la clause export dans ton exe.

    exemple:

    ma 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
     
    library dll;
     
    uses
      SysUtils,
      Classes;
     
    {$R *.res}
     
    function Ajouter(A, B: Integer): integer; stdcall external 'prog.exe';
     
    function Somme(A, B: Integer): Integer;
    begin
      Result := Ajouter(A, B);
    end;
     
     
    exports
      Somme;
     
    begin
    end.

    et mon exe:

    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
     
    type
      TForm1 = class(TForm)
        btn1: TButton;
        procedure btn1Click(Sender: TObject);
      private
      public
      end;
     
    var
      Form1: TForm1;
     
     
    function Somme(A, B: Integer): Integer; external 'dll.dll';
     
    function Ajouter(A, B: Integer): integer; stdcall; 
     
    exports
      Ajouter; //<-- lexe export la fonction egalement
     
    implementation
     
     
    {$R *.dfm}
     
    function Ajouter(A, B: Integer): integer;
    begin
      Result := A + B;
    end;
     
    procedure TForm1.btn1Click(Sender: TObject);
    begin
      Showmessage(IntToStr(Somme(5,6)));
    end;
     
    end.
    je te montre ca car quand je vire l'export de l'executable alors j'ai le meme message d'erreur que toi c'est pourquoi tu devrais vérifier ces points.

  6. #6
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Points : 55
    Points
    55
    Par défaut
    pourquoi est ce qu'on doit ajouter la clause export dans l'exe aussi??
    j'avour que ça je l'ai pas fait, je vais le tester pour voir
    merci de m'avoir repondu si vite...

  7. #7
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Citation Envoyé par bouzaidi
    pourquoi est ce qu'on doit ajouter la clause export dans l'exe aussi??
    précisement parce que ta dll utilise les fonctions de l'exe
    si j'en crois ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure ExportToFileMultiple_NWE(ExportType : TFileType; refcon : String; DestinationType: TDestType;
                                       MajStatuts,choixRepertoire : Boolean;
                                       RepertoireCible : String); stdcall; external 'exportdeals.exe';
    external 'exportdeals.exe' qui est ton exe

  8. #8
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Points : 55
    Points
    55
    Par défaut
    oui merci c'etait ça le problème. j ai pas mis de caluse export dans mon exe. Merci beaucoup kafeine

  9. #9
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par Kaféine
    salut,

    je vois que tu importes des fonctions de ton executable.
    tu as bien vérifie la clause export dans ton exe.

    exemple:

    ma 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
     
    library dll;
     
    uses
      SysUtils,
      Classes;
     
    {$R *.res}
     
    function Ajouter(A, B: Integer): integer; stdcall external 'prog.exe';
     
    function Somme(A, B: Integer): Integer;
    begin
      Result := Ajouter(A, B);
    end;
     
     
    exports
      Somme;
     
    begin
    end.

    et mon exe:

    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
     
    type
      TForm1 = class(TForm)
        btn1: TButton;
        procedure btn1Click(Sender: TObject);
      private
      public
      end;
     
    var
      Form1: TForm1;
     
     
    function Somme(A, B: Integer): Integer; external 'dll.dll';
     
    function Ajouter(A, B: Integer): integer; stdcall; 
     
    exports
      Ajouter; //<-- lexe export la fonction egalement
     
    implementation
     
     
    {$R *.dfm}
     
    function Ajouter(A, B: Integer): integer;
    begin
      Result := A + B;
    end;
     
    procedure TForm1.btn1Click(Sender: TObject);
    begin
      Showmessage(IntToStr(Somme(5,6)));
    end;
     
    end.
    En fait, je ne sais pas où je dois mettre la clause exports dans mon exe. Quand je l ai mis juste avant implementation comme tu m'a indiqué l'erreur suivante est au rendez vous: " undeclared identifier : 'ajouter'"

  10. #10
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Citation Envoyé par bouzaidi
    En fait, je ne sais pas où je dois mettre la clause exports dans mon exe.

    tu peux le mettre dans le source du programme à condition que la fonction a exporter soit visible.
    ex:
    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
     
    program prog;
     
    uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1};
     
    {$R *.res}
     
    exports
      Ajouter;
     
    begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.
    ceci est ok car

    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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        btn1: TButton;
        procedure btn1Click(Sender: TObject);
      private
      public
      end;
     
    var
      Form1: TForm1;
     
     
    function Somme(A, B: Integer): Integer; stdcall external 'dll.dll';
     
    function Ajouter(A, B: Integer): integer; stdcall; //<= visible depuis source du prog
     
    implementation
    (...)

    pour ce qui concerne:

    Citation Envoyé par bouzaidi
    l'erreur suivante est au rendez vous: " undeclared identifier : 'ajouter'
    si tu mets en commentaire la fonction ajouter dans le bloc de code précédent on obtient l'erreur. c'est une question de visibilité.

    pareil avec mon exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    (...)
    function Ajouter(A, B: Integer): integer; stdcall; 
     
    exports
      Ajouter; //<-- export ici ok car définition de la fonction plus haut
     
    implementation
    (...)
    le contraire te donne l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    (...)
    exports
      Ajouter;  <- erreur du compilateur ici car il connait pas ajouter 
     
    function Ajouter(A, B: Integer): integer; stdcall; 
     
    implementation (...)
    maintenant je vois pas l'intéret car avec des dll lié a l'exe comme ici
    ca veut dire que ta dll n'est pas indépendante de ton executable donc un autre programme pourra utiliser ta dll seulement si tu fournir l'exe.
    J'imagine que tu as tes raisons...

    voilà j'espere que j'ai été clair sinon hésite pas

  11. #11
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Points : 55
    Points
    55
    Par défaut
    Bon, pour l'interet de ma dll, j'ai bien mes raison, elle sera depuis un projet C++... mais bon

    j'ai toujours le probleme de visibilté d'une fonction que j'utilise dans mon exe, j'ai appliqué à la lettre ce que tu 'as dit, mais j'ai toujours une erruer
    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
     
    {...}
    type
      TF_Main = class(TForm)
       {....}
      private
       {....}
      protected 
       {....}
      public 
      {....}
    end;
    var
      F_Main: TF_Main;
      F_Splash: TF_Splash = nil;
      ExportDealRestoreMsg : Cardinal = 0;
      const NomDLL = 'ED_DLL.dll';
     
      procedure ExportToFile(ExportType : TFileType; Listrefcon : TStringList; DestinationType: TDestType;
                           MajStatuts,choixRepertoire : Boolean; RepertoireCible : String;
                           CreerUnitaire : Boolean); stdcall; external NomDLL;
      function GetTypeDeal(refcon : string): string;  stdcall;
     
    implementation
     {....}
    et l'erreur renvoyé est la suivante:
    [Error] FM_Main.pas(430): Unsatisfied forward or external declaration: 'GetTypeDeal'

    J'ajoute à cela que cette fonction gettypedeal est appelée depuis ma dll... et que j'ai déjà d'autres fonctions que j'appele et je n'ai pas ce problème. je n'ai le problème qu'avec cette fonction
    Merci beacoup ami

  12. #12
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Citation Envoyé par bouzaidi
    (...)

    et l'erreur renvoyé est la suivante:
    [Error] FM_Main.pas(430): Unsatisfied forward or external declaration: 'GetTypeDeal'
    cette fois le message d'erreur est clair :

    soit GetTypeDeal est une declaration avancee auquelle cas tu dois l'implementer dans cette unite
    soit elle est external et donc tu dois lui ajouter la directive [external '...']

  13. #13
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Points : 55
    Points
    55
    Par défaut
    j'ai fé tous et pourtant j'ai toujours cette erreur, je te montre le code:
    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
     
    unit FM_Main;
     
    interface
     
    uses
      .....
     
    type
      TF_Main = class(TForm)
      {....}
      private  {...} 
      protected  {...}
      public  
        {...} 
        function GetTypeDeal(refcon : string): string; 
    {si je supprime cette ligne une erruer est renvoyée qui di le compilateur ne connait pa la fonction implementée ci dessous...}
     
        {...}
      end;
    var
       {....}
       function GetTypeDeal(refcon : string): string;  stdcall;
       //exports GetTypeDeal; --> ici sans commentaire ca donne erreur
       //la clause exports est mise dans le fichier du program exactement comme tu m as dit avant le begin
    implementation 
      {...}
       function TF_Main.GetTypeDeal(refcon : string): string; 
       begin
       {...}
       end;
      {...}
    end.
    et voila le code du program qui voit cette unité TF_main.
    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
     
    program exportdeals;
     
    uses
      ShareMem,
      FM_Main in 'FM_Main.pas' {F_Main}, ......;
    var
      Mutex : THandle;
    {$R *.res}
      exports GetTypeDedal;
    begin
      ExportDealRestoreMsg := Windows.RegisterWindowMessage('Export des Deals');
     
      Mutex := CreateMutex(nil, True, 'Export des Deals');
      if (Mutex <> 0) and (GetLastError = 0) then
      begin
        try
          Application.Initialize;
          Application.Title := 'Export Deals';
      Application.CreateForm(TF_Main, F_Main);
      Application.Run;
        finally
          if Mutex <> 0 then
            CloseHandle(Mutex);
        end;
      end
      else
        SendMessage(HWND_BROADCAST, ExportDealRestoreMsg, 0, 0);
     
    end.

  14. #14
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Points : 55
    Points
    55
    Par défaut
    STP si t'as une idée je suis preneur
    ce bug m'a cassé la tête depuis trois jours et je ne sais pas comment faire pour le résoudre je suis en stage dans une société de gestion de fond et personne dans mon équipe ne travillle en delphi, et si je n'y arrive pas je serai dans la merde si je puisse me permetre

    Aide me pls

  15. #15
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    exports GetTypeDedal;
    le nom cet export ne correspond pas GetTypeDeal ??????

    de plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     public  
    function GetTypeDeal(refcon : string): string; 
     
        {...} 
    {si je supprime cette ligne une erruer est renvoyée qui di le compilateur ne connait pa la fonction implementée ci dessous...}
    cette declaration est une methode de la classe TF_Main et son implementation est dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       function TF_Main.GetTypeDeal(refcon : string): string; 
       begin
       {...}
       end;

    essai de virer le "TF_Main." avant le nom de la methode dans la partie implementation

    et supprime la declaration dans la partie public de la TF_Main

    tu dois avoir ca:

    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
     
    unit FM_Main;
     
    interface
     
    uses
      .....
     
    type
      TF_Main = class(TForm)
      {....}
      private  {...} 
      protected  {...}
      public  
        {...} 
    //supprime cette declaration
        {...}
      end;
    var
       {....}
       function GetTypeDeal(refcon : string): string;  stdcall;
       //exports GetTypeDeal; --> ici sans commentaire ca donne erreur
       //la clause exports est mise dans le fichier du program exactement comme tu m as dit avant le begin
    implementation 
      {...}
     
    //supprime le TF_Main.
       //function TF_Main.GetTypeDeal(refcon : string): string; 
       function GetTypeDeal(refcon : string): string; 
       begin
       {...}
       end;
      {...}
    end.
    et modifi l'export

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    exports GetTypeDeal;

  16. #16
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Points : 55
    Points
    55
    Par défaut
    Je crois que c'est bien comme tu m'as indiqué qu'il faut faire, mon seul problème c'est que si je déclare la fonction GetTypeDeal en dehors du TF_Main comme tu dis, je n'ai plus accés aux autres méthodes et variables globales de TF_Main alors que j'en ai besoin dans le corps de GetTypeDeal. Alors si je peux vraiment trouver une solution pour pouvoir faire de cette sorte je crois que ca sera gagné.
    Merci d'avance.

  17. #17
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Je peux pas trop t'aider là car je sais pas ce que tu fais dans ton code.
    l'idéal serait que je vois ta fiche principale.
    Mais sache qu'il existe des solutions pour partager des objets comme les fiches avec les librairies, toutefois je te le conseil pas car ca riquerais de te compliquer la vie surtout si tu es débutant en Delphi.
    tu pourrais extraire les fonctions qui te gène de la fiche pour les placer dans une unité globale par exemple. Evidemment si ces dites fonctions utilisent des controles de la fiche ca complique un peu mais c'est pas impossible.
    Encore un fois il faudrait que je vois ton code...

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    bouzaidi, je te conseillerai de remplacer ta dll par un paquet .dpk.
    Tu places l'ensemble du code de la dll dans le paquet puis tu lies le paquet compilé .bpl à ton application.

    Sinon les premieres choses urgentes sont de bien comprendre la visibilité des membres et methodes d'une classe (private, public, protected); les declarations au niveau d'une interface ou d'une implementation et le mot clé forward.

    Eviter les dependances cycliques entre une dll qui appelle du code de l'exe et l'exe qui appelle du code de la dll.

  19. #19
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Citation Envoyé par Fabrice ROUXEL 1
    je te conseillerai de remplacer ta dll par un paquet .dpk.
    effectivement le package est largement plus puissant que la dll néanmoins
    j'ai entendu parlé de C++

    Citation Envoyé par bouzaidi
    Bon, pour l'interet de ma dll, j'ai bien mes raison, elle sera depuis un projet C++... mais bon
    bon ok pas clair mais bon y'a C++ dans la phrase

    or un package ne sera pas compatible avec C++ (sauf compiler avec c++ builder peut etre?)

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/08/2013, 13h46
  2. Réponses: 5
    Dernier message: 13/02/2009, 20h13
  3. L'application n'a pas réussi à s'initialiser correctement
    Par kchrel dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 13/02/2009, 20h08
  4. L'application n'a pas reussi s'inissialiser correctement 0xc0000135
    Par psychoman dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 14/05/2007, 10h19
  5. Réponses: 12
    Dernier message: 02/05/2005, 17h16

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