Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1960 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1225696
barroud
Posté le 18-10-2005 à 19:41:15  profilanswer
 

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:

mood
Publicité
Posté le 18-10-2005 à 19:41:15  profilanswer
 

n°1225824
jesus_chri​st
votre nouveau dieu
Posté le 18-10-2005 à 23:29:09  profilanswer
 

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

n°1225907
HelloWorld
Salut tout le monde!
Posté le 19-10-2005 à 09:24:46  profilanswer
 

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
n°1226616
barroud
Posté le 19-10-2005 à 20:04:00  profilanswer
 

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!

n°1226854
HelloWorld
Salut tout le monde!
Posté le 20-10-2005 à 10:37:20  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
Supprimer un variable (GET) en JS[Résolu][SQL]Résultat d'une requete dans variable.
Changement de variable dans un forModifier variable environnement utilisateur ?
Variable globaleMettre une LISTE de fichiers dans une variable
DOS - mettre resultat d'une commande dans variable[RESOLU] ereur non-static variable.........
variable 
Plus de sujets relatifs à : [C++]Appeler une variable globale de DLL en C++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR