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 :

Appeler une DLL chargé en mémoire depuis plusieurs autres DLL


Sujet :

Langage Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 211
    Par défaut Appeler une DLL chargé en mémoire depuis plusieurs autres DLL
    Bonjour,

    Voici mon soucis:

    J'utilise une DLL (que nous appellerons DLL_Chargement) qui construit un objet à partir d'une base de donnée. Ce processus est assez long (1minutes).

    J'ai des clients qui lance un logiciel qui utilise une DLL_Api et j'aimerais que cette DLL_API demande à la DLL_Chargement de lui transmettre l'objet qu'elle a récupéré depuis la base de données (pour éviter de le recharger car cela est très long !).

    Dans mon cas on peut imaginer que je suis en local car c'est pour une DLL sur un serveur Web !

    Or je ne sais pas comment faire appel à la DLL_Chargement qui est déjà lancé.
    Déjà est-ce possible ?
    Si oui est-ce une DLL qu'il faut pour se type de besoin ?
    Si oui comment peut-on faire pour identifier le processus de la DLL et interrogé celui-ci précisément ?

    D'avance merci pour vos réponses.

    Julien

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    informations à verifier, je ne suis pas sur a100% de ce que j'avance.
    si tu charge plusieurs fois une meme dll (dans une meme periode), tu peux garder des objets uniques dans ta dll (communs a toutes les instances).
    il me semble que la partie initialization est faite au premier chargement de la dll, et la finalization au dechargement de la derniere dll. Si ce n'est pas le cas, il me semble qu'il y a 3 messages dans ta DllMainProc: WM_PROCESS_ATTACH, WM_PROCESS_DETACH, WM_THREAD_ATTACH, WM_THREAD_DETACH qui sont respectivement
    - la premiere instanciation de la dll
    - la derniere liberation de la dll
    - une instanciation de la dll deja instanciee
    - une desinstanciation de la dll deja instanciee
    Je crois que tu peux partager les objets entre les differents appelants de la dll.
    Sinon, la solution est peut etre d'utiliser les interfaces / objets COM.

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Par défaut
    Autant que je sache, il n'est pas possible de partager des objets de manière directe entre des applications instanciant une même DLL. En effet, la DLL est chargée dans l'espace d'adressage de chaque process, le code est partagé, mais chaque application a ses propres données.

    Dans ton cas, pourquoi ne pas utiliser des IPC de type pipes nommés ou un segment de mémoire partagé ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 211
    Par défaut
    Merci pour les réponses.

    Je ne connais pas les "IPC de type pipes nommés ou un segment de mémoire partagé" mais si cela va dans le sens que ce que je veux faire je vais essayer de me documenter dessus.

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    Citation Envoyé par Reisubar Voir le message
    Autant que je sache, il n'est pas possible de partager des objets de manière directe entre des applications instanciant une même DLL. En effet, la DLL est chargée dans l'espace d'adressage de chaque process, le code est partagé, mais chaque application a ses propres données.

    Dans ton cas, pourquoi ne pas utiliser des IPC de type pipes nommés ou un segment de mémoire partagé ?
    effectivement, la memoire n'est pas partagée.

    par contre, tu peux essayer de creer une interface pour ton objet, et utiliser un objet com. J'ai essayé a une epoque de faire un test de base, j'ai trouvé ca pas trop compliqué a mettre en place, et je pense que ca peut repondre a ton probleme

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/07/2010, 09h23
  2. Appeler une fonction dans un package depuis SQL
    Par Stefan C dans le forum SQL
    Réponses: 2
    Dernier message: 19/06/2009, 17h14
  3. appeller une application en java .JAR depuis page html
    Par karimoscapitated dans le forum Général Java
    Réponses: 4
    Dernier message: 25/05/2009, 13h55
  4. Réponses: 0
    Dernier message: 27/11/2007, 17h17
  5. [VB6 + ACCESS] Appeler une méthode d'un macro depuis VB6
    Par david71 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 12/07/2007, 17h04

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