Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

probleme de hook avec dll

3 réponses
Avatar
syn-ack
bonjour,

jai un programme qui charge une dll de facon dynamique (dll A),
puis effectue un appel a une fonction de A

A->fonction();



dans A->fonction() jutilise le code suivant:
{
tex=GfxAllocBlankTexture("win1",128,128,3,data); // dll chargé par .lib
(graphic.dll)
hHook = SetWindowsHookEx( WH_CALLWNDPROC, (HOOKPROC)HookProc, hdl, 0 );
}


mon probleme est le suivant, si jenleve le SetWindowsHookEx(), ca marche
bien, mais si je laisse le code tel quel, jai un message de win comme quoi
le programme x (qui est hooké) ne trouve pas la dll graphic.dll dans les
chemins suivant : ........(dont le chemin ou se trouve la dll A)., ce que je
comprend pas, c'est que j'utilise l'appel de cette fonction uniquement par
le programme de base.

j'espere avoir été clair, il y a un truc qui m'echappe dans le
fonctionnement.

merci pour votre aide

3 réponses

Avatar
syn-ack
jai essayé de le résoudre avec ca, ca na rien changé


GetEnvironmentVariable("PATH",path,2048);
if (path[strlen(path)-1] != ';') strcat(path,";");
strcat(path,SysGetSystemPath(hInstance)); // chemin ou se trouve ma
graphic.dll
SetEnvironmentVariable("PATH",path);



"syn-ack" a écrit dans le message news:
c9nbub$146$
bonjour,

jai un programme qui charge une dll de facon dynamique (dll A),
puis effectue un appel a une fonction de A

A->fonction();



dans A->fonction() jutilise le code suivant:
{
tex=GfxAllocBlankTexture("win1",128,128,3,data); // dll chargé par .lib
(graphic.dll)
hHook = SetWindowsHookEx( WH_CALLWNDPROC, (HOOKPROC)HookProc, hdl, 0 );
}


mon probleme est le suivant, si jenleve le SetWindowsHookEx(), ca marche
bien, mais si je laisse le code tel quel, jai un message de win comme quoi
le programme x (qui est hooké) ne trouve pas la dll graphic.dll dans les
chemins suivant : ........(dont le chemin ou se trouve la dll A)., ce que


je
comprend pas, c'est que j'utilise l'appel de cette fonction uniquement par
le programme de base.

j'espere avoir été clair, il y a un truc qui m'echappe dans le
fonctionnement.

merci pour votre aide











Avatar
Arnaud Debaene
syn-ack wrote:
bonjour,

jai un programme qui charge une dll de facon dynamique (dll A),
puis effectue un appel a une fonction de A

A->fonction();


Donc A n'est pas une DLL mais un objet....


dans A->fonction() jutilise le code suivant:
{
tex=GfxAllocBlankTexture("win1",128,128,3,data); // dll chargé par
.lib (graphic.dll)


Le code de GfxAllocBlankTexture est dans graphic.dll, c'est bien çà?

hHook = SetWindowsHookEx( WH_CALLWNDPROC, (HOOKPROC)HookProc, hdl, 0
); }



Que vaut HookProc (la fonction correspondante est où)? Que vaut hdl?


mon probleme est le suivant, si jenleve le SetWindowsHookEx(), ca
marche bien, mais si je laisse le code tel quel, jai un message de
win comme quoi le programme x (qui est hooké) ne trouve pas la dll
graphic.dll dans les chemins suivant : ........(dont le chemin ou se
trouve la dll A)., ce que je comprend pas, c'est que j'utilise
l'appel de cette fonction uniquement par le programme de base.



Utilises process explorer (www.sysinternals.com) pour vérifier quels sont
les modules chargés par ton appli. Certains debogeurs (VC, etc...) ont une
fenêtre "modules" qui fait la même chose.

Arnaud
Avatar
syn-ack
"Arnaud Debaene" a écrit dans le message news:
40bf6de5$0$22545$
Le code de GfxAllocBlankTexture est dans graphic.dll, c'est bien çà?


oui

Que vaut HookProc (la fonction correspondante est où)? Que vaut hdl?


-static LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam);
et elle se trouve dans la meme dll
-hdl est le HINSTANCE de la dll que je sauve a son chargement.

(je crois avoir resolu un peu a la barbare en copiant la dll graphic.dll
dans systeme32)

probleme n3)


jai un probleme avec opengl, et je pense que c lié au faite que les valeurs
de opengl en interne ne se partage pas entre les diff process.

jexplique

prog A ouvre la dll B, et appelle B->init() qui creer une texture opengl
stocke en section shared de la dll B.
dll B fait son hook , et pendant le hook, il capture la fenetre qui est en
cours de reduction, recupere son bitmap, et met a jour la texture opengl.
ensuite le prog A appelle B->Draw() qui va afficher un carré avec la texture
qui est censé etre la fenetre en reduction.
le probleme est que la texture est bien creer, mais la texture est tjrs
blanche, comme si la memoire agp n'etait pas partagée.

alors jai 2 idees
idee A) lors du hook, j'envoi un message a la dll B pour lui dire de
capturer tel fenetre et de creer la texture. mes pb sont :
1) est que je ne sais pas si une dll peut s'envoyer des messages sans avoir
de fenetre a elle meme. faut til creer une fenetre invisible?
2) le temps de lenvoi du message, la fenetre va se reduire, et du coup je ne
pourrais pas avoir son bitmap de facon correct.

idee B) lors du hook je stock le hwnd de la fenetre en cours dans la section
shared, et je le traite au moment de laffiche dans draw() qaund le prog A
l'apelle.


ya til des idees plus propres?