Bonjour,

Mon problème semble à première vue s'apparenter à celui décrit ici. La différence majeure est que AfxBeginThread() est appelée dans une classe managée :

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
__gc class ServiceThread
{
protected:
	CWinThread *m_pThread;            
 
	static UINT ThreadFunc(LPVOID pvParam);
 
public:
	bool runService();
};
 
 
bool ServiceThread::runService()
{
	m_pThread = AfxBeginThread( (AFX_THREADPROC)ThreadFunc, this);
	if(!m_pThread)
	{
		// Impossible de créer le thread !
		return false;
	}
	return true;
}

J'obtiens l'erreur suivante à la compilation :
ServiceThread.cpp(35) : error C2665: 'AfxBeginThread' : aucune des surcharges 2 ne peut convertir le paramètre 2 à partir du type 'ServiceThread __gc *const '
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxwin.h(4105): peut être 'CWinThread *AfxBeginThread(AFX_THREADPROC,LPVOID,int,UINT,DWORD,LPSECURITY_ATTRIBUTES)'
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxwin.h(4108): ou 'CWinThread *AfxBeginThread(CRuntimeClass *,int,UINT,DWORD,LPSECURITY_ATTRIBUTES)'
lors de la tentative de mise en correspondance de la liste des arguments '(AFX_THREADPROC, ServiceThread __gc *const )'
Il y a donc un problème de conversion de ma classe managée vers le type LPVOID que je n'arrive pas à résoudre.

Si vous avez une solution, elle sera la bienvenue!