IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Warning 19 warning C4800: 'LRESULT' : forcing value to bool 'true' or 'false' (performance warning)


Sujet :

C++

  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Par d�faut Warning 19 warning C4800: 'LRESULT' : forcing value to bool 'true' or 'false' (performance warning)
    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.

  2. #2
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par d�faut
    http://msdn.microsoft.com/en-us/library/b6801kcy.aspx

    Par contre, je ne comprends absolument pas pourquoi tu fais une m�thode template. Si c�est pour retourner un bool, ben, retourne un bool�

    Genre :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    bool TextView::TextViewExecute(HWND hwnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
    {
    	return SendMessage(hwnd, iMessage, (WPARAM)wParam, (LPARAM)lParam) != 0;
    }

  3. #3
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Par d�faut
    Non je ne peux pas car TextViewExecute est appel�e via un sendmessage et suivant le message cela peu retourner un char *, un long, un int, etc ...

    ce que j'ai fait du coup j'ai s�par� chaque �v�nement associ� � une methode c'est le seul moyen que j'ai trouv�. et je n'utilise plus les template.

  4. #4
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par d�faut
    Dans ce cas, ce qu�il te faut c�est un variant pour le type de retour.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. DXX32: Warn: Registry value too long
    Par korsakoff69 dans le forum DirectX
    R�ponses: 1
    Dernier message: 03/06/2012, 00h56
  2. warning "Using a default value of *** for maximum step size"
    Par membreComplexe12 dans le forum Simulink
    R�ponses: 2
    Dernier message: 19/01/2012, 00h00
  3. warning C4800 :Conversion forc�e de char* en bool!
    Par bertry dans le forum C++/CLI
    R�ponses: 3
    Dernier message: 31/12/2010, 11h20
  4. R�ponses: 3
    Dernier message: 18/01/2007, 17h26
  5. Warnings lors de la compilation
    Par polo54 dans le forum C
    R�ponses: 5
    Dernier message: 07/02/2003, 09h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo