[C++]Appeler une variable globale de DLL en C++

Appeler une variable globale de DLL en C++ [C++] - C++ - Programmation

Marsh Posté le 18-10-2005 à 19:41:15    

Bonsoir,
Dans un programme en c++, j'utilise une DLL que j'ai fait aussi en c++. J'arrive à en appeler les fonctions mais pas les variables globales que j'ai rendu accessible.
 
Pour une fonction, je fais comme suit :
HINSTANCE DLLHandle;
// Utile pour garder le Handle de la DLL.
 
typedef void (* VoidPointeurType)(void);
// Déclare un type pointeur pointant une fonction
// ne retournant rien et ne prenant pas d'arguments en entrée.
 
VoidPointeurType init;
 
 
Puis :
 
DLLHandle = LoadLibrary("Acqui_307_dll.dll" );
// Ouvrons la bibliothèque et offrons son HANDLE à DLLHandle
 
init = (VoidPointeurType)GetProcAddress(DLLHandle,"init" );
init();
 
 
Pour une variable, apparement, c'est la même chose mais pourtant je bloque...
 
Quelqu'un pourrait-t-il me renseigner?
 
 :jap:

Reply

Marsh Posté le 18-10-2005 à 19:41:15   

Reply

Marsh Posté le 18-10-2005 à 23:29:09    

je dis ça au feeling, mais si tu link après le démarrage du prog avec un LoadLibrary (et non pas en passant par un .lib), avant le link dynamique, elle est sencée être où ta variable ?
Je ne pense pas que ce soit possible de faire comme ça.
 
essaye en générant un .lib
attention, pas de .lib statique, le .lib qui permet de définir à la compil les liens vers une dll. Ce .lib s'occupe tout seul de charger la DLL, et il le fait au démarrage du prog, donc tu peux y mettre les var globales comme celles de la libc (stdin, stdout...) qui sont dans msvcrt.dll (et le msvcrt.lib correspondant)
 
L'inconvéniant est que s'il manque une dll le prog ne démarre pas et tu ne peux pas choisir à l'exécution quelle dll charger. Tu ne peux pas non plus décharger une dll chargée par un .lib

Reply

Marsh Posté le 19-10-2005 à 09:24:46    

C'est quoi l'erreur ?
GetProcAddress te renvoie l'adresse de la variable, pas sa valeur. Est-tu sûr que la variable est bien exportée (=> dependency walker).
Pense à utiliser les balises cpp pour ton code.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 19-10-2005 à 20:04:00    

Merci pour vos réponse. HelloWorld => C'est bien ca que je faisais mais j'ai pas réussi à obtenir de bon résultat... Ca passait à la compil mais aprés ces variables contenaient un peu n'importe quoi...
dependency walker ==> Quesako????
 
Je me suis débrouillé en créant un pointeur sur une structure dans ma dll que je passais à l'exécutable par retour de fonction. Et ca marche bien là donc je reste la dessus... Mais le GetProcAddress, dans le principe m'interressait plus...
 
Merci a vous deux!

Reply

Marsh Posté le 20-10-2005 à 10:37:20    

Dans le code posté, tu initialise ton pointeur de fonction avec l'adresse d'une variable qui pointe vers une fonction. Donc ta variable init ne pointe pas vers une fonction, mais vers un pointeur de fonction.
Pour dependency walker, 1° lien sous google:
http://www.dependencywalker.com/


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed