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 :

problème de violation d'acces


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Par défaut problème de violation d'acces
    Bonjour tout le monde,
    j'ai un projet .exe qui fait appelle à une fonction qui est écrite dans une dll, qui fait à son tour un autre appel à des fonction et procedures de l'exe. Si je supprime la DLL et je met sa fonction dans l'exe il n'y a aucun probleme et tout marche bien, mais quand je modularise le truc en (exe+DLL) j'ai une erreur de violation d'acces à l'execution, donc ca doit etre un probleme de conception.
    voici le 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
     
    library ED_DLL;
     
    uses
      ShareMem,  Dialogs, SysUtils,
      Classes,
      Windows,
      //unitdll in 'unitdll.pas';
      FM_Main in 'FM_Main.pas'; //TF_main est la form de mon exe qui contient les fonction que je vais appeler depuis ma dll
    {$R *.res}
     
      procedure ExportToFileMultiple_NEW(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; const F_Main: TF_Main); stdcall;
    var
      i    : integer;
      type_du_deal : String;
      //F_Main: TF_Main;
    begin
         for i := 0 to Listrefcon.Count-1 do
         begin
            type_du_deal:= F_Main.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
                  F_Main.ExportToFileMultiple_NEW(ExportType, Listrefcon[i] , DestinationType, MajStatuts,
                                         choixRepertoire, RepertoireCible)
               else
                  F_Main.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
                  F_Main.ExportToFileMultiple_NEW(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
                  F_Main.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;
     
    exports
         ExportToFile;
     
    begin
    end.
    alors que depuis mon exe, j'appele la focntion classiquement la fonction ExportToFile, et je note que j'ai bien mis la clause stdcall; external 'NomDLL'; dans l'exe.

    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,
    J'avoue ne pas bien comprendre la logique : ta dll et ton exe sont complètement inter-dépendants ... Pourquoi utiliser une DLL dans ce cas ? Tout mettre dans l'exe serait plus simple non ?
    Si tu veux absoluement une DLL, ne serait-il pas plus simple de lui implémenter toutes les fonctions dont elle a besoin plutôt que d'utiliser des fonctions (et méthodes !) de ton exe ? Cela la rendrait indépendante et t'éviterait beaucoup de galères ...
    eb.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Par défaut
    Citation Envoyé par ebastien
    Bonjour,
    J'avoue ne pas bien comprendre la logique : ta dll et ton exe sont complètement inter-dépendants ... Pourquoi utiliser une DLL dans ce cas ? Tout mettre dans l'exe serait plus simple non ?
    Si tu veux absoluement une DLL, ne serait-il pas plus simple de lui implémenter toutes les fonctions dont elle a besoin plutôt que d'utiliser des fonctions (et méthodes !) de ton exe ? Cela la rendrait indépendante et t'éviterait beaucoup de galères ...
    eb.
    Je suis tout à fait d'accord avec toi, j'ai déjà mentionné que tous marche bien quand j'insère la fonction de ma dll dans mon exe, mais j'ai bien mes raisons de faire cette DLL...
    En plus je ne peux pas réimplémenter dans ma dll toutes les fonctions dont j'ai besoin car c'est très liès à mon exe...
    donc si tu si tu peux m'aider sur mon erreur je t'en serais vraiment reconnaissant.
    Merci

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    J'imagine que tu dois avoir tes raisons, désolé si elles m'échappent complètement
    As-tu essayé de mettre un point d'arrêt dans le code de ta dll pour voir quelle ligne de code plante ? La violation d'accès provient d'un problème d'instance sur un de tes pointeurs.
    Pour débugger ta DLL, dans le projet de ta dll, tu dois définir ton exe comme application hôte (menu executer/paramètres).

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Hi,

    Pour moi, ton problème est d'abord un problème de conception.

    Une dll doit être indépendante, et en tout état de cause, ne doit pas dépendre de fonctions définies dans le programme qui l'utilise.

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Par défaut
    Citation Envoyé par droggo
    Hi,

    Pour moi, ton problème est d'abord un problème de conception.

    Une dll doit être indépendante, et en tout état de cause, ne doit pas dépendre de fonctions définies dans le programme qui l'utilise.
    Hi droggo
    bainh si cher ami, puisque la clause export 'nomprog.exe' est permise. donc depuis ma dll je peux appeler des fonctions qui sont dans l'exe... me suis je trompé???

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 187
    Par défaut
    Citation Envoyé par ebastien
    J'imagine que tu dois avoir tes raisons, désolé si elles m'échappent complètement
    As-tu essayé de mettre un point d'arrêt dans le code de ta dll pour voir quelle ligne de code plante ? La violation d'accès provient d'un problème d'instance sur un de tes pointeurs.
    Pour débugger ta DLL, dans le projet de ta dll, tu dois définir ton exe comme application hôte (menu executer/paramètres).
    Merci pour la réponse
    en fait j'ai déjà ajouter mon exe comme application hote en ajoutant le chemin de mon exe dans Run->Parameters...
    Je note que j'arrive a générer ma DLL, mais le programme plante exactement dans le prmier accès à la DLL, c'est a dire c est que le programme crache lors de l'appel de ExportToFile qui est implémentée dans la DLL (cetruc est testé avec des point d'arret...). donc mon problème c'est vraiment un problème de conception... ca compile mais à l'execution mon prog ne peu acceder à la DLL.
    Pleeease sauvez moi si vous voyez comment

    Merci les gas

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/12/2008, 22h30
  2. Problème de violation d'accès
    Par kurul1 dans le forum C++Builder
    Réponses: 4
    Dernier message: 11/09/2008, 14h57
  3. Réponses: 5
    Dernier message: 13/01/2007, 19h45
  4. [vb 2005]Problème de violation d'accès concurentiel
    Par estelledany dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/06/2006, 17h14
  5. Problème de violation d'accès
    Par Oluha dans le forum Bases de données
    Réponses: 11
    Dernier message: 31/05/2005, 10h26

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