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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 78
    Par défaut communication entre un projet DLL et une application
    bonjour tt le monde jai un peti programmeur! jai un bouton qui permet d'ouvrir un opendialog pour choisir un fichier et jai une combobox et jai afficher le chemin ke jai specifier avek lopendialog cest a dire jai recuperer le chemin et je lai afficher dan ma conbobox! jai fai 2 projet qui sont reuni dan un groupe de projet ! jai un projet DLL et une application ! je ve recuperer la chaine de caratere ke jai afficher dan ma conbobox pour la communiquer a mon projet DLL ! ce but de faire est de pouvoir partager cette chaine de caratere parse ke ensuite je v faire communiker ma DLL avek visual basic mai sa sera dan un 2eme temps ! comment je doi faire pour donner ma chaine de caractere a ma DLL?? cest urgent merci pour tout renseignement ! cest urgent mes amis
    PROJET EXECUTABLE
    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
     /********************************************************/
    /*      Fonction permettant d'ouvrir Opendialog         */
    /********************************************************/
    void __fastcall TForm2::Button1Click(TObject *Sender)
    {
     
     if(OpenDialog1->Execute())
     {
         ComboBox1->Items->Add(OpenDialog1->FileName);
         //ListBox1->Items->Add(OpenDialog1->FileName);
     }
     
    }
     
    void __fastcall TForm2::ComboBox1Change(TObject *Sender)
    {
     
    }
    //------------------------------------------------------------------------

    PROJET DLL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     /********************* Include ***************************/
    #include <clx.h>
    #include <windows.h>
    #include "ExecutableFrm.h"
    #include "Saisie.h"
    #pragma argsused
     
    /********************** Point d'entré de la DLL **********/
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
            return 1;
    }

  2. #2
    Membre expérimenté 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
    Par défaut
    Bonjour Jules,

    Si j'ai bien compris tu veux mettre la DLL comme intermédiaire entre deux applications?

    Application1 <-> DLL <-> Application2

    La façon dont tu le décris me parait impossible.
    Il faut considérer que la DLL est une extension de ton application.
    C'est à dire que dans une DLL tu réunis des fonctions que tu as très peu envie de faire évoluer tout en les partageant entre plusieurs applications.
    Exemple tu fais une fonction de calcul de matrice: elle peut être utile dans plusieurs projets alorts tu la mets dans une DLL. Et chaque projet peut y faire appel.

    Pour ce qui est de passer des paramètres à la DLL:
    Attention les DLL n'aime pas communiquer par AnsiString!
    Tu dois, dans la DLL, faire une fonction qui attend ce paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     void __fastcall Nom_Fonction (char *MyStr)
    {
    //Code de la fonction
    }
    Ensuite tu crée un fichier ".h" pour exporter cette fonction (je ne me rapelles plus du code et Builder est au boulot)

    Dans ton application1, là ou tu veux transmettre ton nom de fichier, tu mets:
    Nom_Fonction(ComboBox1->Text.c_str());


    Pour faire communiquer les deux applications tu peux utiliser une connexion réseau. Cela nécessite que le PC soit connecté à un réseau ou à Internet lorsque les deux applications s'exécutent.

    Cela fait longtemps que je réfléchis à faire communiquer deux applications sans connexion réseau car j'ai des cas de ce type d'utilisation à dévelloper... La seule solution que j'ai trouvé c'est de créer deux répertoire de communication (un TX et un RX)
    Dans le premier la première application dépose un fichier.
    Avec un Timer la seconde application scrute ce répertoire. Et répond si nécessaire à la demande en utilisant le même nom de fichier dans le second répertoire avec le même principe de scrutation pour la seconde application. Il est possible de faire la même chose en jouant uniquement sur l'extension des fichiers.

    Dans la pages sources j'ai trouvé ceci:

    http://c.developpez.com/sources/bcb/...filemappingchr

    Je penses que cela peut être utile pour ce que tu cherches à faire.

    Mattetfamilly.

  3. #3
    Membre expérimenté 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
    Par défaut DLL en intermédiaire entre ton appli et excel
    Bonsoir Jules,

    Je ne l'avais vraiment pas envisager comme cela...

    En effet, tu peux faire communiquer ton appli avec excel en utilisant une DLL.

    Comment souhaites tu utiliser cette information dans excel?

    Et quelle difficulté rencontres tu lorsque tu exportes?

    Eventuellement, ce que j'ai déjà fait avec une DLL...
    Tu peux envoyer le chemin en le mettant dans une TStringList.
    Ta TStringList ne comporte qu'une ligne mais c'est plus facile à l'envoyer dans la DLL qui n'aime pas travailler avec une AnsiString et qui pour moi n'est pâs évidente pour envoyer une châine tout simplement.
    Me demande pas pourquoi il supporte la TStringlist et pas l'AnsiString...

    En revanche pour ce qui est de transmettre le chemin ensuite dans excel: il y a longtemps que je n'ai pas fait cela.
    Si c'est pour le mettre dans une cellule de excel c'est tout simple et cela doit être comme pour ton entier.

    Je rapporterais un bout de source du boulot demain pour la TStringList si tu veux.

    Mattetfamilly

  4. #4
    Membre émérite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Par défaut
    Neilos, tu as tout à fait raison, j'utilise borland quotidiennement afin de créer une DLL utilisable par outils créés avec Delphi.

    Bien qu'effectivement le char * est à préconiser, dans un environnement pûr Borland, c'est une nette amélioration d'employer AnsiString.

    Par contre, niveau portabilité effectivement c'est de la merde.

    Il y a moyen de trouver le source d'AnsiString pour pouvoir créer des Bindings pour d'autres langages ou d'autres compilateurs.

  5. #5
    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
    Par défaut
    Une solution envisageable uniquement sous Windows (mais puisque c'est pour Excel), et seulement si les applis fonctionnent en même temps : les FileMapping de Windows, je crois qu'il y a un exemple ici http://c.developpez.com/sources/bcb/?page=communication
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  6. #6
    Membre expérimenté
    Avatar de lanonyme
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 229
    Par défaut Remarque
    Bonjour,
    juste comme remarque.

    Ne serai pas t'il plus simple, pour une communication appli-excel d'utiliser une liaison DDE ?

    Enfin, moi je dis ça, mais je dis rien

    lanonyme

  7. #7
    Membre éprouvé

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

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Citation Envoyé par lanonyme
    Bonjour,
    juste comme remarque.

    Ne serai pas t'il plus simple, pour une communication appli-excel d'utiliser une liaison DDE ?

    Enfin, moi je dis ça, mais je dis rien

    lanonyme
    C'est ce que je pense aussi, mais comme il semblait tenir à sa DLL, je me suis dit qu'il avait une bonne raison.

  8. #8
    Membre éprouvé

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

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Citation Envoyé par ferry.jules
    ce but de faire est de pouvoir partager cette chaine de caratere parse ke ensuite je v faire communiker ma DLL avek visual basic mai sa sera dan un 2eme temps ! comment je doi faire pour donner ma chaine de caractere a ma DLL??
    Je me permet de te faire remarquer que tu es sur un forum et non sur ton téléphone portable . Les règles du forum imposent à tout le monde un français un minimum correct et je pense que le texte ci-dessus n'en fait pas parti. Je te demanderais donc pour tes prochains post de faire un petit effort : ça permettra aux autres forumeurs de mieux lire ton texte, de mieux te comprendre et donc de mieux te répondre.

    Citation Envoyé par ferry.jules
    cest urgent merci pour tout renseignement ! cest urgent mes amis
    Bien que tu puisses être pris par des contraintes de temps cela n'accélérera pas les réponses : les gens répondent quand ils ont une réponse et le temps d'y répondre. A l'avenir évite donc les "c'est urgent". Merci beaucoup.

    Pour ton problème je te conseille avant toute chose de lire un des nombreux tutoriels sur l'utilisation des DLL dans un projet C++ Builder.

    Bon courage !

  9. #9
    Membre émérite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Par défaut
    Citation Envoyé par Mattetfamilly
    Pour ce qui est de passer des paramètres à la DLL:
    Attention les DLL n'aime pas communiquer par AnsiString!
    Tu dois, dans la DLL, faire une fonction qui attend ce paramètre.
    void __fastcall Nom_Fonction (char *MyStr)
    {
    //Code de la fonction
    }
    Pourquoi est-ce que les DLL n'aime pas communiquer par AnsiString ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 78
    Par défaut
    ben moi personnelement jaimerai seulement que le chemin que jai specifier et que jai recueper dans ma conbobox soit donner a ma dll ensuite je verrai comment je vais faire pour pouvoir recuperer cette chaine de caractere de ma dll vers excel ! pour linstan mon probleme cest de recuperer cette chaine de caractere !

  11. #11
    Membre éprouvé

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

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Je répète...lit un tutoriel...
    Ce n'est pas pour être méchant mais ce serait vraiment un bon début...

    EDIT : Notre ami ferry.jules n'a pas trop apprécié ma réponse. Je viens de relire le thread et je trouve que la réponse que tu as eu de Mattetfamilly est très bonne. Si tu bloque dans sa mise en oeuvre dit le, mais explique précisement ton problème.

    EDIT :
    Citation Envoyé par swirtel
    Pourquoi est-ce que les DLL n'aime pas communiquer par AnsiString ?
    Une DLL peut communiquer par des AnsiString...mais si tu crée un projet DLL dans le fichier crée automatiquement (celui avec la fonction WinEntry ou quelque chose comme cela) tu aura une petite explication made in Borland).

    En fait pour commencer l'AnsiString est propre à Borland...or le principe d'une DLL est entre autre de pouvoir être utilisée par d'autres programme. Utiliser les AnsiString empêche toute personne n'utilisant pas les outils Borland à développer avec ta DLL.
    Ensuite si tu utilises les AnsiString dans les DLL il faudra distribuer avec ton projet la dll borlandmm.dll (ou quelque chose comme cela).

    C'est à peu près tout ce dont je me souviens de l'explication de Borland.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 78
    Par défaut passage de parametre entre une dll et une application
    jai deux projet dans un gestionnaire de projet ! le premiere cest une application et le deuxieme cest une dll ! jaimerai que ma dll ouvre mon application cest a dire Form1 qui lui donne le parametre qui est en faite une chaine de caractere ! (au faite jai Form1 qui ouvre Form2 dans mon application) ma dll donnera le parametre a Form1 ensuite FOrm1 ouvrira Form2 et lui donnera aussi le parametre enfin ce parametre devra safficher dans une conbobox est il possible de le faire ?? le raisonnement est il bon ??

    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
     
    /******************** Include ***************************/
    #include <clx.h>
    #include <windows.h>
    #include "ExecutableFrm.h"
    #include "Saisie.h"
    #include <string.h>
     
    const MaxBufferSize = 255;
    extern "C" __declspec(dllexport) char * __stdcall MaFonction_chemin(char *myVar);
    #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)
    {
    char Buffer[MaxBufferSize];
    ZeroMemory(Buffer,MaxBufferSize);
    if (strlen(myVar) > MaxBufferSize ) return "";
    strcpy(Buffer,myVar);
    strcpy(myVar,Buffer);
    return myVar;
    }

  13. #13
    Membre éprouvé

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

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    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 ?

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 78
    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

  15. #15
    Membre éprouvé

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

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

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 78
    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 !

+ 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