[VC++] Dll et STL: probleme de recopie (???)

Dll et STL: probleme de recopie (???) [VC++] - Programmation

Marsh Posté le 14-08-2001 à 17:09:12    

hello,
 
voici mon soucis:
 
Dans une fonction, j'intancie une map de la STL (de microsoft). Ensuite, je charge explicitement une dll (LoadLibrary) et je recupere l'adresse d'une fonction de cette dll. Cette fonction prend en argument un pointeur sur un objet map.
 
Une fois le pointeur sur la fonction récupéré, j'appelle cette fonction et je lui passe un pointeur sur l'objet map instancié précédemment.
Le pointeur n'a pas changé, mais je ne retrouve pas completement l'objet pointé: une partie de ses attributs ont changés... Je suis donc incapable de faire une manipulation sur cete objet, pas même une recopie.
 
ex:
void fonc(void)
{
 map<int,int> mymap;
 HINSTANCE hinst = LoadLibrary("mydll" );
 
 typedef void (* TYPE) (map<int,int> *);
 TYPE my fonc = (TYPE) GetProcAddress(hinst, "dllfunc" );
 
 dllfunc(&mymap);
}
 
quand je rentre dans la fonction dllfunc, alors l'adresse de mymap est bien toujours la même, mais je ne peux rien faire sur l'objet pointé, pas même le recopier.
J'ai essayer de passer une référence au lieu d'un pointeur, mais c'est la même chose.
 
Si qq1 a compris ce que je veux dire et a en plus une idée, alors j'attends sa réponse avec une TRES grand impatience, parce que je ne vois pas d'ou vient le soucis...
 
merci d'avance.

Reply

Marsh Posté le 14-08-2001 à 17:09:12   

Reply

Marsh Posté le 16-08-2001 à 17:41:45    

si par hasard yen a qui lisent ce post un jour, voila la solution à mon soucis:
 
il se trouve que l'implementation de la STL par Microsoft est buggée. Mon soucis ne vient pas vraiment d'un bug, mais quasiment. Il se trouve que certaines classes templates possèdent des variables de classes (static). Et quand un exe appelle une dll, l'exe instancie les varioables de classe dans sa zone mémoire, et la dll fait de même. Mais ce ne sont pas les même des 2 côtés. Aujourd'hui, on ne peut passer que les vecteurs entre une dll et un exe.
 
pour plus d'infos:
http://www.dinkumware.com/
 
merci quand même à ceux qui se sont posés la question.

Reply

Marsh Posté le 16-08-2001 à 19:21:00    

SoWhatIn22 a écrit a écrit :

 
merci quand même à ceux qui se sont posés la question.  




de rien  :D  
 
et merci pr la reponse au passage  :jap:

Reply

Sujets relatifs:

Leave a Replay

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