Bonjour,

J'ai une dll en c++ natif/mfc, que je souhaite utiliser dans une application .Net (en c#).

J'ai donc essayé de réaliser un wrapper en C++/CLI pour les classes de la dll (ici un thread) que je souhaite utiliser, suivant le tutoriel de nico-pyright.

Ma classe ThreadWrapper contient comme attribut un pointeur vers ma classe native, CThread, qui elle-même dérive de CWinThread.

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
public ref class ThreadWrapper 
	{
		public:
			ThreadWrapper();
			~ThreadWrapper();

		// Members
		protected:
			CThread*  m_pThread;

		// Service
		public:
			CThread* GetThread() { return m_pThread; }

			Boolean	 CreateThread();

			void StopThread();

			ThreadWrapper^ operator=(ThreadWrapper^ src) ;

	};

A la compilation, tout semble fonctionner, mais à l'exécution, lors du retour de la méthode CreateThread(), le pointeur m_pThread est corrompu et du coup mon programme plante.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
     Boolean ThreadWrapper::CreateThread()
	{
		return (m_pThread->CreateThread()==0 ? false : true);
	}
Je pense que c'est un problème d'espace mémoire managé/non managé, mais je n'arrive pas à comprendre le mécanisme exact.

Si quelqu'un peut m'éclairer sur ce sujet...
Merci.