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

C++Builder Discussion :

communication entre un projet DLL et une application


Sujet :

C++Builder

  1. #21
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    C'est pas un peu la même question que le post que tu viens de marquer résolu...ou à très peu de choses près ?

  2. #22
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 78
    Points : 18
    Points
    18
    Par défaut
    oui effectivement a peu de chose mai aupravant je communiquai avec excel sous visual basic cetait different vu que cetai la premiere fois que je programmai de cette facon! maintenan cest a travers une application que je dois communiquer

  3. #23
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Dans les deux posts tu parlais d'une DLL....je vois pas vraiment la différence...

  4. #24
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 78
    Points : 18
    Points
    18
    Par défaut
    oui dans mon premier post cetait une dll avec excel mais lapplication nintervenait pas encore ! maintenant dans mon deuxieme post jaimerais passer un parametre entre la meme dll en question et mon application !

  5. #25
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    bonjour,
    il est exactement possible de se servir d'une DLL pour communiquer entre plusieurs applications
    pour cela la DLL utilise une partie de mémoire partagée entre toutes les instances utilisant cette DLL
    ci-joint un exemple en C++

    Cordialement
    Fichiers attachés Fichiers attachés

  6. #26
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 78
    Points : 18
    Points
    18
    Par défaut
    ben je peu que te vai regarder de plus pres ton zip et je vous tiens au courant !

  7. #27
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    bonjour, dans mon envoi précédent il manquait un fichier que je joins ici
    fichier SharedDll.def
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    LIBRARY SharedDll
     
    SEGMENTS
      SHSEG CLASS 'SHCLS' SHARED
    cordialement

  8. #28
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 78
    Points : 18
    Points
    18
    Par défaut
    j'ai une question a quoi sert le fichier *.def ? jaimerai savoir ! de plus jai repri lexemple que tu ma donner je lai adapter a mon programme et lorsque je lance la compilatoin sa donne cette erreur suivante :
    Executable.exe Composant introuvable
    Cette application n'a pas pu demarer car DLL.dll est introuvable. la reinstallation de cette application peut corriger le probleme.
    ensuite lorque je clik sur ok cela m'ouvre une fenetre CPU ! je ne sais d'ou peu provenir cette erreur !que dois je faire ??

  9. #29
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    J'ai une question a quoi sert le fichier *.def ? jaimerai savoir !
    le fichier .def est un fichier permettant de modifier le comportement des fonctions dans une DLL
    il est nécessaire si tu veux recompiler l'exemple que j'ai mis en attachement

    de plus jai repri lexemple que tu ma donner je lai adapter a mon programme et lorsque je lance la compilatoin sa donne cette erreur suivante :
    Executable.exe Composant introuvable
    Cette application n'a pas pu demarer car DLL.dll est introuvable. la reinstallation de cette application peut corriger le probleme.
    ensuite lorque je clik sur ok cela m'ouvre une fenetre CPU ! je ne sais d'ou peu provenir cette erreur !que dois je faire ??
    dasn l'exemple fourni la DLL s'appelle shareDll.dll , il est donc normal que tu ne trouve pas Dll.dll
    cette nouvelle DLL fournit les fonctionalités suivantes
    1. une procédure FillBuffer permettant de stocker la chaine envoyée en paramètre
    2. une fonction ReadBuffer qui retourne le contenu du Buffer

    je te conseille de lancer plusieurs instances de l'application <TestSharedDll.exe> pour comprendre le fonctionnement du partage de buffer entre plusieurs applications

    Cordialement

  10. #30
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 78
    Points : 18
    Points
    18
    Par défaut
    bonjour,
    je vous explique exactement ce que je voulai faire parse que jai relu les post ils
    sont pas clair de ma part ! en faite tout part d'exel sous visual, la chaine de
    caractere qui devait etre envoyer et recuperer par ma dll marche parfaitement !
    dans mon projet executable qui est une application,qui devra recuperer cette chaine
    de caractere et la transmettre a mon projet executable a mon application en gros !
    Mais dans mon application jai 2 Form ! la finalité serai que ma dll ouvre Form1 qu'
    ensuite Form1 ouvre Form2 qui ensuite recupere la chaine de caractere qu laffichera
    dans une Edit pour pouvoir ensuite lire le contenu de cette chaine (la chaine de
    caractere nest en autre qu'un lien vers un fichier qui devra etre lu par exemple
    C:\Documents and Settings\Projet\fichier.doc) ! je sais cest tres lourd jen suis dsl !
    jai rechercher comment ourir une apllication jai trouver ca
    ShellExecute(NULL,"open","C:\Documents and Settings\Moh\Bureau\\exe_dll\Executable.exe",Buffer,NULL,SW_SHOWNORMAL);
    jai essayer mais mon application ne s'ouvre pas !

  11. #31
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 78
    Points : 18
    Points
    18
    Par défaut Merci de penser aux balises [code][/code]

    Ma chaine de caractere se trouve deja dans Buffer il suffit juste de la donner a Form1 Qui la donnera a Form2 pour lafficher !
    Voila ce que je viens de faire et jai un probleme de lieur voici mon code :
    Projet 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
     #include <clx.h>
    #include <windows.h>
    #include "ExecutableFrm.h"
    #include "Saisie.h"
     
    const  MaxBufferSize = 500;
    char Buffer[MaxBufferSize];
    extern "C" __declspec(dllexport) char* __stdcall ReadBuffer();
     
    #pragma argsused
     
    /********************** Point d'entré de la DLL **********/
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
            return 1;
    }
     
    char * __stdcall MaFonction_chemin(char *myVar)
    {
     
      ZeroMemory(Buffer,MaxBufferSize);
      if (strlen(myVar) > MaxBufferSize ) return "";
      strcpy(Buffer,myVar);
      strcpy(myVar,Buffer);
      ShellExecute(Form1->Handle,"open","C:\Documents and Settings\Moh\Bureau\stage\Projet\060512\version2\exe_dll\Executable.exe",Buffer,NULL,SW_SHOWNORMAL);
     
      return myVar;
    }
     
    char * __stdcall ReadBuffer()
    {
          return Buffer;         // lecture du Buffer
    }
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Projet executable
     
    #include <clx.h>
    #pragma hdrstop
    #include "ExecutableFrm.h"
    #include "Saisie.h"
     
    #pragma package(smart_init)
    #pragma resource "*.xfm"
     
    TForm1 *Form1;
    extern "C" __declspec(dllimport) char* __stdcall ReadBuffer();
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
     
    /********************************************************/
    /*      Fonction permettant d'&fficher la 2eme fenetre  */
    /********************************************************/
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
            TForm2 *Form2;
            Form2=new TForm2(Application);
            Form2->Edit1->Text=szBuffer;
            Form2->ShowModal();
            delete Form2;
    }
     
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
         szBuffer=ReadBuffer();
         ShowMessage(szBuffer) ;
     
    }
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Jai un probleme de lieur que voici :
    [Lieur Erreur] Unresolved external 'ReadBuffer' referenced from C:\DOCUMENTS AND SETTINGS\U228167\DESKTOP\PROJET\060515\VERSION1\EXE_DLL\EXECUTABLEFRM.OBJ

    Comment pourrai je regler cette erreur ?
    Merci pour toutes aide !!

  12. #32
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Pourrais tu s'il te plaît penser à mettre ton code entre les balises . Ce n'est pas la première fois que je te le dit et que je suis obligé d'éditer tes posts et ça commence à être lassant...

    Merci d'y penser.

  13. #33
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 78
    Points : 18
    Points
    18
    Par défaut communication entre un projet dll et une application
    Dite moi est il possible que ma DLL puisse ouvrir mon application sachant que ma DLL fait partie du meme gestionnaire de projet ? si oui comment pourrai je faire ?

  14. #34
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 78
    Points : 18
    Points
    18
    Par défaut
    bonjour tout le monde,
    en mettant cette ligne de code dans ma dll pour qu'elle puisse ouvrir un executable en l'occurence mon application au moment de la compilation jai un message d'erreur que voici :
    [Lieur Erreur] Unresolved external '_Form1' referenced from
    C:\DOCUMENTS AND SETTINGS\U228167\DESKTOP\
    PROJET\060516\VERSION1\EXE_DLL\DLL.OBJ
    je ne sais comment resoudre cela !
    voici mon code qui permet d'apeler mon application:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ShellExecute(Form1->Handle,"open",
    "C:\Documents and Settings\Moh\Bureau\stage\
    Projet\060515\version3\exe_dll\Executable.exe",Buffer,
    NULL,SW_SHOWNORMAL);
    comment faire ?

  15. #35
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    De toute façon il faut mettre les \\ sinon ça passera à la compile mais ça plantera à l'exécution.
    Je n'ai pas tout suivi, mais ta dll ne peut pas récuperer le Form1->Handle ??

  16. #36
    Membre actif Avatar de Mattetfamilly
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 201
    Points
    201
    Par défaut Lancer ton application
    Dans ta DLL:
    c'est normal qu'elle ne connaisse pas Form1: la fiche de l'application ne peut pas être partagée dans ce sens.
    Corrige plutôt ton ShelExecute par la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ShellExecute(NULL,"open","C:\Documents and Settings\Moh\Bureau\stage\Projet\060515\version3\exe_dll\Executable.exe",Buffer,"C:\Documents and Settings\Moh\Bureau\stage\Projet\060515\version3\exe_dll\Executable.exe",SW_SHOWNORMAL);
    voici un extrait de mon application:
    Dans un passage pour la gestion des mises à jour de l'application, lorsque l'application détecte que la version "à téléchargeré disponible sur notre serveur est plus récente qu'elle même, alors l'application lance celle du serveur en lui envoyant la commande : AnsiString("MAJ\t"+Directory).c_str().
    C'est un paramètre chaîne que je transmet à mon application pour lui qu'elle doit faire une mise à jour de l'application locale en lui indiquant l'emplacement local.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ShellExecute(NULL,"open",AnsiString(Acceuil->ServDir+"\\LaboC.exe").c_str(),AnsiString("MAJ\t"+Directory).c_str(),AnsiString(Acceuil->ServDir+"\\LaboC.exe").c_str(),SW_SHOWNORMAL);


    Ensuite dans ton application, dans l'évènement OnShow de Form1, tu récupéres la chaîne comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     AnsiString MonChemin;
    int i_bcl_recup;
     
    for(MonChemin="";i_bcl_recup=0;i_bcl_recup<ParamCount;i_bcl_recup++)
    MonChemin= MonChemin + ParamStr(i_bcl_recup);
     
    Form2->Edit1->Text=MonChemin;
    Form2->ShowModal();
    Voili voilà, est ce clair?

    Mattetfamilly

    Et surtout si c'est le cas n'oublies pas ----->

  17. #37
    Membre actif Avatar de Mattetfamilly
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 201
    Points
    201
    Par défaut Désolé Neilos....
    Désolé Neilos,
    pour tout le boulot de reprise que tu as dû faire sur nos posts....

    J'ai compris avant hier pourquoi et comment corriger le défaut lié au balise code /code.

    J'ai surement sauté une ligne / un paragraphe lors de mon inscription....

    Mais maintenant, j'ai compris et je corriges tout en écrivant.


    Mattetfamilly

  18. #38
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 78
    Points : 18
    Points
    18
    Par défaut
    Di moi Trap D je dois mettre des doubles \\ a chaque fois c’est a dire a la place de mettre ma ligne de commande que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     ShellExecute(NULL,"open",
    "C:\Documents and Settings\U228167\
    Desktop\ Projet\060517\version1\exe_dll\Executable.exe",Buffer,
    "C:\Documents and Settings\U228167\
    Desktop\Projet\060517\version1\exe_dll\
    Executable.exe",SW_SHOWNORMAL);

    Je dois mettre ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     ShellExecute(NULL,"open",
    "C:\\Documents and Settings\U228167\
    Desktop\ Projet\060517\version1\exe_dll\Executable.exe",Buffer,
    "C:\\Documents and Settings\U228167\
    Desktop\Projet\060517\version1\exe_dll\
    Executable.exe",SW_SHOWNORMAL);
    Mais je comprend pas parse que MatteFamily na pas poster la même chose que tu vienne de me dire et apparemment sa marche !!!!!!

  19. #39
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 78
    Points : 18
    Points
    18
    Par défaut
    Mattefamilly je sais pas ce que tu veu faire mais moi jai toujours appris qu'il y avait trois parametre dans une boucle for pourquoi dans le post precedent il y en a 4 !!!!!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(MonChemin="";i_bcl_recup=0;i_bcl_recup<ParamCount;i_bcl_recup++)

  20. #40
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 78
    Points : 18
    Points
    18
    Par défaut
    Au faite je sais que sur visual C++ il faut aussi inclure la bibliotheque de shellexecute ! sur C++ builder faut il un #include..... pour pouvoir utiliser Shellexecute ? si oui lequel ?

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

Discussions similaires

  1. Communication entre un plugin web et une application
    Par justfab dans le forum Autres langages pour le Web
    Réponses: 0
    Dernier message: 25/04/2014, 17h28
  2. Réponses: 7
    Dernier message: 12/08/2010, 11h40
  3. Communication entre 2 projets dans une même solution
    Par Alex972 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 30/03/2009, 04h35
  4. Utilisation d'une dll dans une application.
    Par jamais34 dans le forum MFC
    Réponses: 5
    Dernier message: 31/03/2006, 10h39
  5. [C#]Communication entre 2 Projets????
    Par Verboz dans le forum ASP.NET
    Réponses: 17
    Dernier message: 23/08/2005, 22h01

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