Pb de Thread

lo_63 Messages postés 12 Date d'inscription vendredi 20 janvier 2006 Statut Membre Dernière intervention 15 février 2008 - 12 mai 2007 à 13:32
lo_63 Messages postés 12 Date d'inscription vendredi 20 janvier 2006 Statut Membre Dernière intervention 15 février 2008 - 15 mai 2007 à 22:42
Bonjour

j'ai une petit question sur les threads.

voila je suis en train de cherché un moyen pour executé une fontion qui ce trouve dans un autre thread.

Exemple :
Mon appli a le thread 2501 et le pointeur $11d457 de la fonction sur la deuxieme appli avec thread 5401.

Quand je fais sur mon appli

type
 toto : function (x,y):longint;stdcall;
var
callback : toto;

begin
@callback := $11d457;
messagebox(0,callback(x,y),'',mb_ok);
end;

Donc apres execution il y a une erreur fatal, je crois que c'est normal puisque au niveau l'appel de la fonction le call se fait sur le meme thread 5401.

Donc je cherche a savoir si c'est possible de changer de thread avant le call de la fonction.

voila j'espere que ma question n'est pas trop nulos :)

A Bientot .....

4 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
15 mai 2007 à 19:06
Salut,

executé une fontion qui ce trouve dans un autre thread


Pour moi, ça ne veut pas dire grand chose...


Un thread ça ressemble à un contexte d'execution (Adresse de la
prochaine instruction à executer, etat de la pile, état des
registres...) Tous les thread d'un même processus ont accès à la même
mémoire, et aux mêmes fonctions.


Un thread c'est en quelques sorte un chemin suivie par le processeur
dans le code. Avec deux trhead, on obtient deux chemins qui sont
executés simultanéments dans le code (En apparence seulement vu que le
processeur ne peut executé qu'un thread à la fois. Du moins les vieux
proces.).


Tu peux pas préciser un peu svp ?
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
15 mai 2007 à 19:16
Je crois que j'ai saisie : tu veux executer un code se trouvant dans un autre processus.


Tes deux applis ne partagent pas la même mémoire. Autrement dit, à
l'adresse x dans le processus 1, il n'y a pas la même chose qu'à
l'adresse x dans le processus 2.


Une technique d'execution de thread dans un processus différent est
détaillé dans un des deux bouquns sur cette page (JR4 ou CP5), je sais
plus. Mais en anglais et en C...


Un execute remote thread dans google peut donner du résultat aussi je pense.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
15 mai 2007 à 19:17
0
lo_63 Messages postés 12 Date d'inscription vendredi 20 janvier 2006 Statut Membre Dernière intervention 15 février 2008
15 mai 2007 à 22:42
bonsoir rt15

Tout d'abord merci pour les réponses.

je vais regarder le JR4. mais je pense que tu as compris mon probleme.

je vais etre peut etre plus clair.

j'ai une application qui load une dll pour les hook et je mets en parametre le pointeur de ma fonction qui est dans mon application 1 et le handle d'une application ou j'applique une demande de hook sur les evenements souris.

Donc quand le handle sur ma form, la dll fait un call sur ma fonction sans posé de probleme, puisque on utilise la meme memoire.

mais si le handle est sur une autre application le call fait une erreur fatal sur l'application ou le hook etait installé.

Apres verification c'est bien ce que tu disait il n'utilise pas la meme memoire et donc le call envoie sur un pointeur memoire de applcations avec le hook.

Le test maintenant c'est d'essayé un CreateRemoteThread mais j'en suis pas sur ;), ca va etres de la haute voltige looll. enfin je vais voir si je crash pas mon pc ;)

Je metterait des infos si cela fonctionne

Merci Encore
0
Rejoignez-nous