Pourquoi Visual Studio donne-t-il des avertissements de compilation lorsque la fonction de curseur ne charge jamais est utilisée ?

la programmation


J’ai eu un peu de difficulté à utiliser la fonction LOADCURSOR dans mon application. Mon application utilise le niveau de mise en garde 4 et traite les avertissements comme des erreurs. Malheureusement, pour les raisons indiquées ci-dessous, Visual Studio a émis des avertissements de compilation. Comment puis-je résoudre la situation ?

Les codes pertinents et les erreurs de compilation sont indiqués ci-dessous :

C++
HCURSOR hCursor = LoadCursor(hInst, MAKEINTRESOURCE(IDC_WAIT));
        HCURSOR hOldCursor = SetCursor(hCursor);
//some codes loading codes

SetCursor(hOldCursor);

6:13:06:168 1>C:\Users\HP\source\repos\ResultSheets\ResultSheets.cpp(2038,45) : avertissement C4302 : ‘type cast’ : troncature de ‘LPWSTR’ à ‘WORD’
16:13:06:168 1>C:\Users\HP\source\repos\ResultSheets\ResultSheets.cpp(2167,53) : avertissement C4302 : ‘type cast’ : troncature de ‘LPWSTR’ à ‘WORD’

Ce que j’ai essayé :

J’ai pensé à l’erreur de compilation.

Solution 1

Le message d’erreur vous indique où dans votre code les erreurs se produisent : ligne 2038, colonne 45 ; et ligne 2167, colonne 53 – mais votre fragment de code n’en montre qu’un (probablement). Utilisez l’éditeur pour accéder à cette ligne (double-cliquez sur le message dans le panneau Erreurs et il y accédera, ou utilisez CTRL+G pour accéder à un numéro de ligne spécifique).
Une fois que vous savez à quelle ligne le message est associé, vous pouvez identifier quelle partie exacte de cette ligne est spécifiée. Si je devais deviner, ce serait le MAKEINTRESOURCE appelez parce que cette macro effectue diverses conversions qui ne sont probablement pas pertinentes ici – elle est définie comme

C++
#define MAKEINTRESOURCE(i) (LPTSTR) ((DWORD) ((WORD) (i)))

Et IDC_WAIT est déjà défini comme :

C++
#define IDC_WAIT            MAKEINTRESOURCE(32514)

il est donc très probable que si vous supprimez le MAKEINTRESOURCEappelez votre code, l’erreur disparaîtra.

Je suppose également que vous avez récupéré le code de quelqu’un qui n’est pas aussi fastidieux que vous : il peut ignorer les avertissements que vous ne faites pas (et moi non plus), donc je ne l’ai jamais vu comme un problème.
Il est également possible de désactiver des avertissements spécifiques pour un morceau de code spécifique : avertissement #pragma | Microsoft Apprendre[^] si vous ne trouvez pas d’autre moyen de résoudre ce problème.

コメント

タイトルとURLをコピーしました