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 habitué
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Points : 137
    Points
    137
    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 émérite
    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
    Points : 2 799
    Points
    2 799
    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 habitué
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    360
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 360
    Points : 137
    Points
    137
    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 émérite
    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
    Points : 2 799
    Points
    2 799
    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