Bonjour
mon problème est le suivant:
Quand je crée une std::map dans un executable, et que je la passe (par valeur ou référence) à une méthode d'un objet compilé dans une DLL externe, je n'arrive pas à accéder à tous les élements de la map (ça plante à partir du deuxième).
Voila un bout de code minimal qui illustre mon pb:
main.cpp: l'"application".
dll.h et dll.cpp : la dll qui contient l'objet et la méthode en question
main.cpp___________________________
dll.h________________________________________
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 #pragma warning( disable: 4786 ) #include <map> #include <iostream> #include <string> #include "dll.h" int main () { std::map<const std::string, std::string> l_map; std::map<const std::string, std::string>::iterator it; int i; l_map["1"] = "2"; l_map["3"] = "4"; l_map["5"] = "6"; for (it = l_map.begin(); it != l_map.end(); it++) { std::cout << (*it).first << ": " << (*it).second << "\n"; } // là, tout s'affiche bien. CDll obj; obj.f(l_map); std::cin >> i; return 0; }
dll.cpp________________________
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #pragma warning( disable: 4786 ) #include <map> #include <iostream> #include <string> #ifdef DLL_EXPORTS #define DLL_API __declspec(dllexport) #else #define DLL_API __declspec(dllimport) #endif class DLL_API CDll { public: void f(std::map<const std::string, std::string>& p_map); };
Le même code tout dans un exe ne pose pas de problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #include "dll.h" void CDll::f(std::map<const std::string, std::string>& p_map) { std::map<const std::string, std::string>::iterator it; for (it = p_map.begin(); it != p_map.end(); it++) { std::cout << "DLL: " <<(*it).first << ": " << (*it).second << "\n"; } // là, ça plante au deuxième passage }
Une idée?
Merci d'avance.
Partager