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

Langage Delphi Discussion :

EAccessViolation lors de l'initialisation d'une form dans une dll


Sujet :

Langage Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut EAccessViolation lors de l'initialisation d'une form dans une dll
    Bonjour,

    Je me suis fait une petit formulaire pour envoyer des emails depuis mes applications. Lorsque ce formulaire est appelé depuis un exe je n'ai pas de problème.

    Par contre lorsque ce formulaire est inclus dans une dll et qu'il est appelé depuis un autre formulaire de la même dll alors il n'est pas initialisé. Et lorsque j'essaie de le créer dans le code j'ai le message d'erreur suivant renvoyé par un composant Indy de Delphi 2007 posé sur le formulaire :
    Project xxx.exe raised exception class EAssertionFailed with message 'Assertion failure (C:\builds\TpAddons\IndyNet\System\IdStack.pas, line 655)'.
    Est-ce qu'il faut faire quelque chose de spécial pour initialiser un formulaire possédant des composants Indy ?

    Merci

  2. #2
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    peut etre en utilisant ShareMem (a mettre en tout premier uses de ton dpr ET de ta dll).
    Sinon, si elle est liée statiquement, il y a des problemes notemment avec les groupBox. Ca se corrige en liant la dll dynamiquement.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Merci pour la réponse.

    Je viens d'essayer de rajouter le ShareMem, mais malheureusement cela ne change rien.

    Et si j'utilise effectivement un TGroupBox, ma dll est déjà liée dynamiquement.

    Une autre idée ?

    Merci encore.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Après quelques tests je précise ma question. C'est le TIdSMTP qui pose problème, puisqu'un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TIdSMTP.Create(AOwner);
    génère le même message d'erreur.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    J'avance.

    En fait les sources d'Indy sont disponibles et en regardant le code je me suis aperçu que le problème venait de ce que la partie "initialization" des unités inclues dans la dll n'était pas exécuté.

    Comment remédier à cela alors ?

    Merci.

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par sovitec Voir le message
    Après quelques tests je précise ma question. C'est le TIdSMTP qui pose problème, puisqu'un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TIdSMTP.Create(AOwner);
    génère le même message d'erreur.
    si tu partages des objets entre l'exe et la dll c'est normal que ça plante...sinon tu devrais regarder la ligne 655 de IdStack.pas
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Non, non, je ne partage rien.

    Comme je l'ai dit dans mon dernier message le problème semble provenir de ce que la parie "initialization" des units utilisées dans la dll ne s'effectue pas. Et la ligne incriminée de IdStack utilise justement un objet créé dans la partie initialization de IdStack.pas

    Mon problème est donc maintenant de savoir la raison de ce comportement, et surtout comment y remédier, ou au moins de savoir quelle pourrait être la partie fautive entrainant ce comportement.

    Il y a une question similaire à la mienne sur le forum de support d'Embarcadero, mais sans réponse concrète malheureusement.

    Merci en tous cas de s'être penché sur mon problème.

  8. #8
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    ca me parait bizare que la partie initilization soit squeezée dans la dll!
    J'ai justement a probleme qui s'en raproche, j'ai une ADOConnection créee dans la partie initialization d'une unité, et ca se passe bien dans un exe normal, mais j'ai une AV si cette unité est utilisée dans une dll !

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    En désespoir de cause j'ai créé une application utilisant exactement les mêmes unités que ma dll, et le problème persiste.

    Quel pourrait être la raison qui fait que la partie initialization des unités d'une application n'est jamais exécutée, sans pourtant qu'une exception ne soit levée ?

    Merci de votre aide.

  10. #10
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    as tu construit ta dll avec "utiliser les dcu de debugage" (et peut etre sans l'optimisation) ?

Discussions similaires

  1. Réponses: 10
    Dernier message: 01/12/2010, 08h26
  2. Une <form> dans une <form>
    Par pierrotparma dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/05/2010, 10h50
  3. modifier un élément d'une form dans une méthode d'une autre form
    Par baldebaran dans le forum Windows Forms
    Réponses: 9
    Dernier message: 14/08/2009, 13h59
  4. Copier une partie d'une form dans une image
    Par Duan dans le forum Débuter
    Réponses: 5
    Dernier message: 11/05/2009, 16h16
  5. Intégrer une Form dans une Form principale
    Par rol72 dans le forum C++Builder
    Réponses: 3
    Dernier message: 27/09/2006, 14h20

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