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 :arf:
PROJET EXECUTABLE
Code:
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:
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;
} |
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
Qui communiques avec qui?
Bonjour Jules,
J'ai oublié mon code au boulot::oops:
Mais à la lecture de tes posts suivants je ne suis plus sûr que cela soit ce dont tu as besoinµ.
Peux tu re préciser le fonctionnement de tes applis?
Lors de mon 1er message, j'avais compris que ton aplli C++ Builder utilisait une DLL qui transmet des informations à excel.
Aujourd'hui, si je comprends bien:
Sous excel tu récupéres des information que tu exploites avec Visual Basic (que tu ne maîtrises pas bien) VB doit alors transmettre une chaîne de caractères à une DLL qui exécute alors une application que tu as créé sous Builder C++.
Si ce que j'ai compris aujourd'hui est vrai, ce que je peux te dire:
je ne maîtrises pas non plus VB (ce n'est pas le bon forum à mon avis)
Je ne sais donc pas comment de VB tu vas exécuter une fonction de la DLL.
en revanche dans ta DLL, je sais comment tu vas transmettre ta chaîne ainsi que comment la récupérer dans ton application:
Dans ta DLL
ta fonction reste comme je l'ai dit plus tôt mais le code est du style:
Code:
1 2 3 4 5
| void __fastcall Nom_Fonction (char *MyStr)
{
//Code de la fonction
ShellExecute (Handle,"open","C:\\monprog.exe",My*Str,0,SW_NORMAL);
} |
Ce code exécute ton application en lui passant pour pramètre la chaîne que tu as envoyé à la fonction.
Dans ton application:
Dans l'évènement "OnCreate" de la fiche qui doit exploiter l'information ou bien dans l'évènement "OnCreate" de la fiche principale, tu récupéres le paramètre avec les codes suivant ParamStr(index) et ParamCount.
Normalement ta chaîne de caractère se trouve dans ParamStr(0) ou ParamStr(1) (je ne sais plus quel est l'indice du premier élément: vérifies l'aide en ligne ou test).
Code:
1 2 3
| AnsiString MonChemin;
MonChemin= ParamStr(0);
ComboBox1->Items->Add(MonChemin); |
Si ton chemin n'a pas une structure correct (exemple: il contient des ' ' : espace) avec la fonction ParamCount tu récupéres la totalité de ton chemin:
Code:
1 2 3 4 5 6 7
| 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);
ComboBox1->Items->Add(MonChemin); |
Voilà, je penses avoir fait le tour de ce que je pouvais par rapport à ce que j'ai compris. :) :) :) :) :) :) :P :P :P
Mattetfamilly.
:D
communication entre un projet dll et une application
oui effectivement mon application contient Form1 qui apel Form2 ce
systeme fonctionne bien ! justement la fonction de l'application : recupere_chemin(char * variable) nest qu'une fonction que jai mis en place pour pouvoir recuperer
le chemin et lafficher dans le memo. je recupere deja le nom du fichier via lopendialog qui ensuite affiche le contenu du fichier ! effectivement je nai pas encore recuperer le chemin que la dll doi me fournir ! je sai pa comment je doi faire ! voila pour tes questions si ten
a dotre nhesite surtout pas ! je v essayer ce que tu vien de me donner comme code et comme conseils !merci !
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:
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;
} |