Bonjour,

J'obtiens une centaine de warning de ce type, je ne voit pas pourquoi, sur une méthode template.

a ce niveau la c'est bon:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
template <typename T>
	T executeTextView(UINT iMessage, WPARAM wParam = 0, LPARAM lParam = 0) {
		return (TextView::getInstance())->TextViewExecute<T>(_hSelf, iMessage, wParam, lParam);		
	}
au niveau de la méthode TextViewExecute j'obtiens des warnings:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
template <typename T>
 T TextView::TextViewExecute(HWND hwnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
	switch (iMessage)
	{
		case TXM_GETLENGTH:
			return   (T) SendMessage(hwnd, TXM_GETLENGTH, (WPARAM)wParam, (LPARAM)lParam); //WARNING
 
		case TXM_GETLINECOUNT:
			return (T) SendMessage(hwnd, TXM_GETLINECOUNT, (WPARAM)wParam, (LPARAM)lParam); //WARNING
 
		case TXM_GETCHARACTERPOINTER:
			return (T) SendMessage(hwnd, TXM_GETCHARACTERPOINTER, (WPARAM)wParam, (LPARAM)lParam); //WARNING
 
		case TXM_COPYID:
			return (T) (SendMessage(hwnd, TXM_COPYID, (WPARAM)wParam, (LPARAM)lParam) != 0);
 
		case TXM_COPYIP:
			return (T) (SendMessage(hwnd, TXM_COPYIP, (WPARAM)wParam, (LPARAM)lParam) != 0);
 
		case TXM_COPYLINE:
			return (T) (SendMessage(hwnd, TXM_COPYLINE, (WPARAM)wParam, (LPARAM)lParam) != 0);
 
		case TXM_GOTOLINE:
			return (T) (SendMessage(hwnd, TXM_GOTOLINE, (WPARAM)wParam, (LPARAM)lParam) != 0);
 
		case TXM_GETDBFILENAME:
			return (T)SendMessage(hwnd, TXM_GETDBFILENAME, (WPARAM)wParam, (LPARAM)lParam); // WARNING
 
		case TXM_GETTEXTLINE:
			return T(SendMessage(hwnd, TXM_GETTEXTLINE, (WPARAM)wParam, (LPARAM)lParam)); //WARNING
 
		case TXM_TOGGLE_BOOKMARK:
			return (T)(SendMessage(hwnd, TXM_TOGGLE_BOOKMARK, (WPARAM)wParam, (LPARAM)lParam) != 0);
 
		case TXM_CLEAR_BOOKMARK:
			return (T)(SendMessage(hwnd, TXM_CLEAR_BOOKMARK, (WPARAM)wParam, (LPARAM)lParam) != 0);
 
		default:
			break;
 
	}
	return 0;
};
Je sais que ce warning provient souvent lorsque qu'une fonction retourne un bool en ces cas la je fait comme l'évènement TXM_CLEAR_BOOKMARK par exemple en ajoutant != 0, pour tous ce
qui ne retoune pas un boolean j'ai ces centaines de warning.

L'évènement TXM_GETTEXTLINE est censé me retourner un char *.

la procédure wndproc:
typedef LONG_PTR sptr_t;

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
sptr_t TextView::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam)
{
 
	switch (iMessage)
	{	
             .......
             case TXM_GETTEXTLINE:
				return reinterpret_cast<sptr_t>(getCurrentTextLine());
        }
}
le code de getCurrentTextLine():
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
29
30
31
32
33
 
char * TextView::getCurrentTextLine()
{
	BOOL	success = FALSE;
	ULONG	nLineNo, nFileOff;
	int cx;
	int ch;
	ULONG fileoff, length;
	char textline[2048];
 
	MouseCoordToFilePos(m_nMouseX, m_nMouseY, &nLineNo, &nFileOff, &cx, ch);
	m_pTextDoc->getlineinfo(nLineNo, &fileoff, &length);
 
	if (length == 0)
		return NULL;
 
	char *buffer = NULL;
	if ((buffer = new char[length + 1]) != 0)
	{
		if (m_pTextDoc->getline(nLineNo, buffer, length + 1) > 0)
		{
			buffer[length] = '\0';
 
			strcpy_s(textline, 2048, buffer);
			strcat_s(textline, "\n");
		}
		delete[] buffer;
		buffer = 0;
	}
	else return NULL;
 
	return textline;
}
Avez vous une idée ?

ca fait plus d'une semaine que je recherche la solution sur le Net et je n'ai pas trouvé.

Merci de votre aide.