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 :

[DLL] Pointeurs [FAQ]


Sujet :

Langage Delphi

  1. #1
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut [DLL] Pointeurs
    Salut à tous
    Voilà je vous écris pour tenter de trouver une solution à mon problème...
    J'ai un programme principal qui appelle une dll en dynamique...
    Dans le programme principal, j'utilise un Composant de mon cru appelé TPedroDossier... C'est un composant invisible dérivé de TComponent...
    La Dll me sert à lancer une form dans laquelle je modifie les données de mon TPedroDossier...
    Voila comment je m'y suis pris:
    Code de la fiche de la DLL (déclaration)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TMain=class(TForm)
    ...
    public
      Dossier:TPedroDossier;
    ...
    end;
    Code de la DLL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function Execute(AppHandle:HWND;aDossier:TPedroDossier):boolean;
    begin
      Application.Handle:=AppHandle;
      with TMain.Create(Application) do
      begin
        Dossier:=aDossier;
        //Diverses initialisations de TMain
        Result:=ShowModal=mrOk;
        Destroy;//Release me pose des problèmes....  :? 
      end;
    end;
    Mon souci est le suivant:
    J'ai une erreur d'exception access violation lorsque je tente de lancer 2 fois de suite cette fonction sachant que la première fois ne renvoit pas d'erreur mais ne fonctionne pas non plus...
    Mon idée: Dans la fonction Execute de a DLL, j'assigne le pointeur de Dossier à aDossier... Sachant que aDossier est membre de TMain, est-ce que le pointer (et le pointer uniquement) n'est pas libéré lors de la destruction de TMain? Et donc que cette instance de TPedroDossier n'est plus accessible?

    Merci d'avance
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 44
    Points : 52
    Points
    52
    Par défaut
    Salut,

    Une piste...
    Il est possible que tu doives intégrer Sharemem dans ta liste des uses.

    Quand elle est utilisée, l'unité ShareMem doit toujours être la première unité énumérée dans la clause uses du programme ou de la bibliothèque l'utilisant.

    ShareMem est l'unité d'interface du gestionnaire de mémoire BORLANDMM.DLL qui permet à des modules de partager de la mémoire allouée dynamiquement. BORLANDMM.DLL doit être déployé avec les applications et les DLL qui utilisent l'unité ShareMem. Quand une application ou une DLL utilise ShareMem, son gestionnaire de mémoire est remplacé par celui contenu dans BORLANDMM.DLL..
    @+

  3. #3
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Aaargh non pas ShareMem... Je voudrais une autre méthode... svp
    Merci quand même
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 44
    Points : 52
    Points
    52
    Par défaut
    A la place de ShareMem, je te propose ... FastShareMem

    Tu auras plus de renseignements ici http://www.codexterity.com/fastsharemem.htm

    Cette méthode est reconnue comme plus performante et elle a l'avantage qu'il ne faut pas distribuer de dll avec l'application.

    @+

  5. #5
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Alors là si ça marche, c'est pas une épine que tu m'enlève du pieds mais un poteau EDF...
    Je vais tester ça dès ce soir merci beaucoup
    PS: Je laisse le post ouvert au cas où Parce que je voudrais quand même essayer d'éviter de passer par là...
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Je ne pensais plus que la solution miracle existe mais j'avais tort... Elle existe: FastShareMem...
    Je n'ai jamais vu autant de bugs réduits à néant avec une petite unité de rien du tout gratos et libre de droit
    Merci mduse pour le tuyau
    Problème résolu
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

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

Discussions similaires

  1. Apeller fonction DLL avec pointeurs en Delphi
    Par dacid dans le forum Delphi
    Réponses: 2
    Dernier message: 11/08/2006, 12h11
  2. Pointeurs de fonction à partir d'une Dll
    Par Figaro dans le forum C
    Réponses: 9
    Dernier message: 17/07/2006, 23h31
  3. passage de pointeurs entre appli delphi et DLL c++
    Par e-teo dans le forum Langage
    Réponses: 1
    Dernier message: 13/10/2005, 21h46
  4. Question de pointeur entre un programme et une DLL
    Par Neilos dans le forum C++Builder
    Réponses: 12
    Dernier message: 01/02/2005, 19h12
  5. Multithread, pointeur et dll
    Par jakouz dans le forum Langage
    Réponses: 4
    Dernier message: 25/06/2004, 14h37

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