【解決方法】カーソルをロードしない関数を使用すると、Visual Studio でコンパイル警告が表示されるのはなぜですか?

プログラミングQA


アプリケーションで LOADCURSOR 関数を使用するのに少し苦労しました。 私のアプリケーションは警告レベル 4 を使用し、警告をエラーとして扱います。 残念ながら、以下に示す理由により、Visual Studio はコンパイルに関する警告を出しました。 どうすれば状況を解決できますか?

関連するコードとコンパイル エラーを以下に示します。

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): 警告 C4302: ‘型キャスト’: ‘LPWSTR’ から ‘WORD’ への切り捨て
16:13:06:168 1>C:\Users\HP\source\repos\ResultSheets\ResultSheets.cpp(2167,53): 警告 C4302: ‘型キャスト’: ‘LPWSTR’ から ‘WORD’ への切り捨て

私が試したこと:

コンパイルエラーについて考えてみました。

解決策 1

エラー メッセージは、コード内のどこでエラーが発生したかを示します: 行 2038、列 45。 そして、行 2167、列 53 – しかし、あなたのコード断片はそれらのうちの 1 つしか示していません (おそらく)。 エディタを使用してその行に移動します ([エラー]パネルでメッセージをダブルクリックするとそこにジャンプします。または、 CTRL+G 特定の行番号に移動します)。
どのメッセージがどの行に関連付けられているかがわかれば、その行のどの部分が指定されているかを正確に特定できます。 推測しなければならないとしたら、それは MAKEINTRESOURCE このマクロは、ここではおそらく無関係なさまざまなキャストを実行するため、呼び出します。次のように定義されています。

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

IDC_WAIT はすでに次のように定義されています。

C++
#define IDC_WAIT            MAKEINTRESOURCE(32514)

したがって、を削除すると、 MAKEINTRESOURCEコードを呼び出すとエラーは消えます。

また、あなたほど気難しい人ではない人からコードを入手したのではないかと思います。彼らはあなたが無視する警告を無視するかもしれないので (私も無視します)、それを問題とは考えませんでした。
特定のコード部分に対する特定の警告を無効にすることもできます。 警告 #pragma | Microsoft Learn[^] 他に対処する方法が見つからない場合。

コメント

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