|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||
|
Membre du Club
![]() Inscription : avril 2007 Messages : 168 ![]() |
Bonjour,
Je voudrais, depuis mon programme principal lancer une fonction qui se trouve dans une dll en lui passant un paramètre. Tout d’abord quand je ne passe pas de paramètre, je fais ceci et ça marche très bien : Code :
Lorsque je modifie uniquement la ligne 4 comme ci-dessous : Code :
Lorsque je modifie la ligne 1 et 4 comme ci-dessous : Code :
Lorsque je modifie les lignes 1, 3 et 4 comme ci-dessous : Code :
Je sais bien que ce dernier exemple est farfelu, ou peut-être que j’aurais dû mettre cette question dans le forum programmation c++ ? Help per favor Thanks |
||||||||
|
|
00
|
|
|
#2 | ||||
|
Expert Confirmé Sénior
![]() ![]() Raymond Inscription : mai 2007 Messages : 7 471 ![]() |
Tu as un problème de déclaration de pointeur de fonction et de cast.
Lorsque tu déclares ton ptr de fonction comme ceci : cela signifie que ta fonction est du type Lorsque tu déclares ton ptr de fonction comme ceci : cela signifie que ta fonction est du type Lorsque tu récupères l'adresse de ta fonction avec GetProcAddress(), tu récupère un ptr de fonction du type FARPROC et donc Si tu veux mettre ce pointeur dans une variable d'un autre type, il faut obligatoirement caster. En fait, quand je dois travailler avec des pointeurs de fonction, systématiquement, je créé un type pour cette fonction. Par exemple : Code :
Code :
PS : cette discussion aurait eu une meilleure visibilité dans un forum de programmation (Windows ou C)
__________________
Raymond Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.WinAgentLog WinAgentLog est un service Windows qui collecte en temps réel les messages Microsoft EventLog et les retransmet en utilisant le protocole Syslog à une machine distante.e-verbe Un logiciel de conjugaison des verbes de la langue françaiseMa page personnelle sur DVP |
||||
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : avril 2007 Messages : 168 ![]() |
Merci,
Je n'ai pas répondu tout de suite car depuis tout à l'heure je cherche à comprendre l'explication, il faut que je retrouve une doc. Je n'avais pas conscience que je voulais mettre un pointeur dans une variable d'un autre type. Ce qui m'intéressait c'était au moment où dans mon programme principal je lance l'exécution de ma fonction en dll de lui passer en paramètre l'adresse d'un buffer (lpbuffer) qui se trouve dans le programme principal afin que ma fonction dll puisse aller lire ce buffer. Dans l'exemple, je ne vois pas à quel endroit je lance l'exécution de la dll, ni comment je lui passe l'adresse de ce buffer. Mais c'est probablement qu'il faut que je retourne vers des cours. Je vais réessayer de comprendre. ![]() Cordialement, |
|
|
00
|
|
|
#4 | ||
|
Membre du Club
![]() Inscription : avril 2007 Messages : 168 ![]() |
Je crois que j'ai à peu près compris maintenant, j’ai fait ça:
Code :
mais peut-être vas-tu me dire que c’est normal : Dans mon point d’entrée ci-dessus (dllEntryAdd1) de ma dll, je me contente de récupérer l’adresse lpcheminlog qui est l’adresse dans mon programme principal du chemin d’un fichier dans lequel ma dll écrira un peu plus tard et je fais passer cette adresse en variable globale de ma dll (Nomfichier = lpcheminlog) (Nomfichier est une variable globale). Je me contente ensuite toujours dans le même point d’entrée de ma dll de lancer un hook pour récupérer les touches du clavier et je reviens immédiatement dans mon programme principal qui lui contient la boucle Getmessage. Il faut préciser que la callback de traitement des touches se trouve dans ma dll et c’est elle qui ira écrire dans le fichier dont le chemin est dans le programme principal et l’adresse de ce chemin en variable globale de ma dll. Je tape une ou deux touches tout se passe bien, puis tout à coup la variable globale de ma dll (Nomfichier) perd l’adresse du buffer du programme principal qui contient le nom du fichier. Est-ce normal ? J’ai essayé de mettre Nomfichier en variable static mais ça ne change rien ! Faut-il que je recopie le chemin du fichier (et pas seulement son adresse) dans une variable globale de ma dll ? Merci |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com