begin process at 2012 05 29 08:08:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Envoyer variable à dll


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Envoyer variable à dll

vendredi 29 octobre 2004 à 17:54:10 | Envoyer variable à dll

goutbouyo

Membre Club
Salut,

Est il possible d'envoyer une variable à une dll ??

Par exemple dans mon programme j'ai la variable char fenetre[256].
Cette variable contient la chaine "internet explorer".

Comment faire pour que dans ma dll, ma fonction :
FindWindow(fenetre,NULL)
corresponde à :
FindWindow("internet explorer",NULL);
vendredi 29 octobre 2004 à 18:13:51 | Re : Envoyer variable à dll

Gendal67


Bonne question, et désolé, mais aucune idée...et toi, tu a une idée pour repondre à ma question (quasi juste ne dessous de le tienne, qui porte aussi sur les dll) ?

Allez, a++

Genda67, à votre service !
vendredi 29 octobre 2004 à 22:48:41 | Re : Envoyer variable à dll

cosmobob

salut,
soit la fonction de ta DLL est appelé depuis ton programme, dans ce cas, tu fais simplement dans le code de ton programme lafonctiondetaDLL("internet explorer"), et dans ta DLL, t'as une fonction qui ressemble a :
void lafonctiondetaDLL(const char* val) {
FindWindow(val, NULL);
}
normalement il est toujours possible de se ramener a un tel cas, car si une fonction de DLL est appelé, c'est que quelque part dans un .exe une fonction de la DLL a été appelée explicitement, et donc le .exe peut lui transmettre ce qu'il veut...

sinon (ce qui revient a dire que ton programme est mal organisé)
ben tu peux toujours t'orienter du coté de CreateFileMapping, pour creer une zone mémoire partagé qui pourra etre accessible d'un peu partout.

enfin je pense que tu devrais détailler davantage ton probleme, sinon il est possible que tu te compliques la vie pour rien...
rappelons qu'une DLL n'est juste que le code compilé de fonctions (soit par ce que ce code peut servir dans d'autres applications (par exemple) ou bien parce que tu as voulu rendre ton programme modulaire). Si la DLL est lié statiquement a ton programme, quand tu codes ton exe, tu peux appeler toutes les fonctions de la DLL comme si elles se trouvaient ds un des fichiers .cpp de ton programme principal...
a++ ;)
samedi 30 octobre 2004 à 00:31:28 | Re : Envoyer variable à dll

goutbouyo

Membre Club
Je fais comme ça :

Ma dll

#include <windows.h>

HINSTANCE thismod;
HINSTANCE hInstance;
HHOOK hhk;
HWND hDlg;
HWND Dlg;
const char* val;

BOOL WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID Reserved)
{
if(dwReason == DLL_PROCESS_ATTACH)
thismod = hDll;

return 1;
}

LRESULT CALLBACK kbdWinAmp(int nCode, WPARAM wParam, LPARAM lParam)
{


if(nCode >= 0)
{
//quand une fenetre est activé
if(nCode == HCBT_ACTIVATE)
{
if (hDlg = FindWindow(val,NULL))

{
if (Dlg=FindWindow(NULL,"Protection activée"))
PostMessage(Dlg, WM_USER+1, 0, 0);
}
}

}
return CallNextHookEx(hhk, nCode, wParam, lParam);
}

extern "C" __declspec(dllexport) int __stdcall Intercepte(const char* val)
{
if(!hhk)
hhk = SetWindowsHookEx(WH_CBT, kbdWinAmp, thismod, 0);

return (int) hhk;
}

extern "C" __declspec(dllexport) void __stdcall FinIntercepte()
{
if(hhk)
{
UnhookWindowsHookEx(hhk);
hhk = 0;
}
}

Mon programme

Intercepte("Outlook Express Browser Class");


Header inclue dans mon programme mais pas dans la dll

#ifndef __DLL_LIBS_H__
#define __DLL_LIBS_H__

// include servant à inclure le fichier lib de la dll
#ifdef WIN32
#pragma comment(lib, "dll hook.lib")

extern "C"
{
int __stdcall Intercepte(const char* val);
void __stdcall FinIntercepte();
}
#endif

#endif __DLL_LIBS_H__



Ca marche toujours pas ...
samedi 30 octobre 2004 à 01:11:30 | Re : Envoyer variable à dll

LordBob

Membre Club
ton programme tu dis faire: "Intercepte("Outlook Express Browser Class");" et voici la fonction de ta dll:
extern "C" __declspec(dllexport) int __stdcall Intercepte(const char* val)
{
if(!hhk)
hhk = SetWindowsHookEx(WH_CBT, kbdWinAmp, thismod, 0);

return (int) hhk;
}

alors ta fonction reçoit "val", mais c'est tout, la "valeur" de val n'est pas traité, on en fait rien... et dans toute ta dll, val n'est pas utilisé !!! normal qu'il ne se passe rien !!! vu que "val" est une variable globale à la fonction de ta procédure, une fois sorti de ta procédure, val n'existe plus meme, si une variable globale porte le meme nom... d'ailleur le fait qu'une variable locale et globale porte le même nom, c'est pas génial ca...

essai de faire ca:
#include <windows.h>

HINSTANCE thismod;
HINSTANCE hInstance;
HHOOK hhk;
HWND hDlg;
HWND Dlg;
const char* g_val;

BOOL WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID Reserved)
{
if(dwReason == DLL_PROCESS_ATTACH)
thismod = hDll;

return 1;
}

LRESULT CALLBACK kbdWinAmp(int nCode, WPARAM wParam, LPARAM lParam)
{


if(nCode >= 0)
{
//quand une fenetre est activé
if(nCode == HCBT_ACTIVATE)
{
if (hDlg = FindWindow(g_val,NULL))

{
if (Dlg=FindWindow(NULL,"Protection activée"))
PostMessage(Dlg, WM_USER+1, 0, 0);
}
}

}
return CallNextHookEx(hhk, nCode, wParam, lParam);
}

extern "C" __declspec(dllexport) int __stdcall Intercepte(const char* val)
{
if(!hhk)
{
hhk = SetWindowsHookEx(WH_CBT, kbdWinAmp, thismod, 0);
g_val = val;
}

return (int) hhk;
}

extern "C" __declspec(dllexport) void __stdcall FinIntercepte()
{
if(hhk)
{
UnhookWindowsHookEx(hhk);
hhk = 0;
}
}

Bob...

"La chance accorde ses faveur aux esprits avertis..."
samedi 30 octobre 2004 à 01:36:32 | Re : Envoyer variable à dll

goutbouyo

Membre Club
Ca marche toujours pas ...

En fait cette partie :


extern "C" __declspec(dllexport) int __stdcall Intercepte(const char* val)
{
if(!hhk)
{
hhk = SetWindowsHookEx(WH_CBT, kbdWinAmp, thismod, 0);
g_val = val;
}


est traitée dans mon programme est non dans la dll.

Donc comment le g_val peut il est ensuite connu dans la dll ???
Faut mettre un header ?
samedi 30 octobre 2004 à 01:48:47 | Re : Envoyer variable à dll

LordBob

Membre Club
je comprend pas pourquoi une partie de ta dll est traité dans ton prog... ce que tu dis qui est traité dans ton prog, fais en sorte que ca soit traité dans ta dll!!! mais garde le meme schéma que moi... que ce que tu avais fait avant, c'est transmettre une valeur à "val", mais cette valeur est perdu, puisque non traité !!!
Bob...

"La chance accorde ses faveur aux esprits avertis..."
samedi 30 octobre 2004 à 01:49:16 | Re : Envoyer variable à dll

cosmobob

salut;
qd tu déclenches le hook, tu lances la fonction Intercepte si j'ai compris. cette fonction ainsi que le reste de la DLL est mappé (cad est injecté ds l'espace memoire) ds le processus hooké, mais comme tu l'as mise en extern, elle peut etre apelé depuis ton exe principal. le g_val doit etre une variable globale de la DLL, et elle est modifiée par le Intercept au moment du lancement du hook. c pour ca que je suis pas sur que g_val = val marche ds le intercepte, par contre si tu déclares g_val comme char g_val[100]; et que ds intercepte, tu copies ce que vaux val ds g_val, la ya plus de chances que ca marche (sinon g_val pointe vers une adresse qui a des chances de ne pas etre valide au sein du processus hooké)

a++ ;)
samedi 30 octobre 2004 à 11:41:02 | Re : Envoyer variable à dll

goutbouyo

Membre Club
J'ai fait des tests pour voir les valeurs de val et g_val à différents endroits.


LRESULT CALLBACK kbdWinAmp(int nCode, WPARAM wParam, LPARAM lParam)

{ if(debut==1)
{
FILE *fd;
fd = fopen("save3.txt","a");
fprintf(fd,"%s\n%s",val,g_val);
fclose(fd);
debut=0;
}

if(nCode >= 0)
{


Val => Outlook Express Browser Class
g_val => Outlook Express Browser Class


if(nCode >= 0)
{
//quand une fenetre est activé
if(nCode == HCBT_ACTIVATE)
{
if(debut==1)
{
FILE *fd;
fd = fopen("save3.txt","a");
fprintf(fd,"test\n%s\n%s",val,g_val);
fclose(fd);
debut=0;
}
if (hDlg = FindWindow(g_val,NULL))

{
if (Dlg=FindWindow(NULL,"Protection activée"))

{

PostMessage(Dlg, WM_USER+1, 0, 0);

}
}
}

}


Val => rien(du blanc..)
g_val=> rien

Je comprends pas pourquoi d'un coup, val et g_val ne valent plus rien ...?
samedi 30 octobre 2004 à 12:05:31 | Re : Envoyer variable à dll

goutbouyo

Membre Club
Excusez moi j'ai raconté n'importe quoi au message précédent ...

En fait ici :


//quand une fenetre est activé
if(nCode == HCBT_ACTIVATE)
{
if(debut==2)
{
FILE *f;
f = fopen("save4.txt","a");
fprintf(f,"2nd valeurs :\n%s\n%s",val,g_val);
fclose(f);
debut=0;
}
if (hDlg = FindWindow(g_val,NULL))

g_val vaut bien: Outlook Express Browser Class.
Mais par contre ça me trouve toujours pas la fenêtre ...

Aidez moi SVP, je suis presque au bout là ...

1 2

Cette discussion est classée dans : variable, internet, dll, fenetre, envoyer


Répondre à ce message

Sujets en rapport avec ce message

Fermeture d'une fenetre [ par mindark ] Bonjour, j'aimerais que mon programme ferme une fenetre (un popup de Internet Explorer) automatiquement..J'ai essaye un faisant un FindWindow (NULL, " shdocvw.dll et navigateur internet [ par Tesla93 ] Bonjour a tous j'aimerai me faire un navigateur personaliser qui repren Le DLL shdocvw.dll ( le dll de internet explorer )comment faire une interface creer un .exe qui ouvre une fenetre internet explorer [ par dany ] bonjourj'aimerais avoir le source pour creer un fichier.exe a mettre sur un cd et qui ouvre un fichier .htmen c++ (avec dev-c++)merci d'avance Problem de DLL [ par anaya ] Bonjour tout le monde,-Je travaille sur deux programmes:Le premier ecrit en c++ qui renvoie surtout une variable nomée "text", Le 2eme c'est une inter Convertir des strings [ par UnExPeCtEdSpy ] Bonjour, Présentation du pb:Je ne suis plus trop familier du c++ mais j'ai du m'y remettre pour utiliser un bout de code en tant que DLL au service d' J arrive pas a envoyer des messages à une autre fenetre [ par fana13 ] Salut a vous, j ai découvert le site hier soir en cherchant des info pour mon bout d application que je suis en train de faire.Alors le but de celle-c variables globales et DLL [ par cosmobob ] je me pose plusieurs questions :quand on crée une DLL, comment déclarer une variable qui soit globale à toutes les instanciations de la DLL ? (cad si fenetre internet dans fenetre c++ [ par chouanseb ] Je voudrais afficher une page internet dans une partie précise de ma fenetre c++, à des coordonées précises de ma fenetre c++. Mail communication internet [ par Mr.X ] tous dabord bonjour a tousJe voudrais savoir s'il étais possible (je l'espere et le pense) d'envoyer un mail depuis un programme (si un commande toute Toolbar internet explorer - DLL [ par davwart ] Hello all,voila, je ne connais pas du tout l'api Windows.Je programme sous Linux mais je dois faire une toolbar pour internet explorer au format *.dll


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,406 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales