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 ?
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 ?
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
Dans les deux posts tu parlais d'une DLL....je vois pas vraiment la différence...
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 !
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
ben je peu que te vai regarder de plus pres ton zip et je vous tiens au courant !
bonjour, dans mon envoi précédent il manquait un fichier que je joins ici
fichier SharedDll.def
cordialement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 LIBRARY SharedDll SEGMENTS SHSEG CLASS 'SHCLS' SHARED
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 ??
Bonjour,
le fichier .def est un fichier permettant de modifier le comportement des fonctions dans une DLLJ'ai une question a quoi sert le fichier *.def ? jaimerai savoir !
il est nécessaire si tu veux recompiler l'exemple que j'ai mis en attachement
dasn l'exemple fourni la DLL s'appelle shareDll.dll , il est donc normal que tu ne trouve pas Dll.dllde 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 ??
cette nouvelle DLL fournit les fonctionalités suivantes
- une procédure FillBuffer permettant de stocker la chaine envoyée en paramètre
- 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
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 !
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 !!
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.
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 ?
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:
comment faire ?
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);
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 ??
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:
voici un extrait de mon application:
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);
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
Voili voilà, est ce clair?
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();
Mattetfamilly
Et surtout si c'est le cas n'oublies pas ----->
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
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 :
Mais je comprend pas parse que MatteFamily na pas poster la même chose que tu vienne de me dire et apparemment sa marche !!!!!!
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);
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++)
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 ?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager