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___________________________
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.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
#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);
};
dll.cpp________________________
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
}
Le même code tout dans un exe ne pose pas de problème.
Une idée?

Merci d'avance.