为什么当使用never loadcursor函数时,Visual Studio会给出编译警告?


我在应用程序中使用 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 列 – 但您的代码片段仅显示其中之一(可能)。 使用编辑器转到该行(双击“错误”面板中的消息,它将跳转到那里,或者使用 CTRL+G 转到特定的行号)。
一旦您知道该消息与哪一行相关联,您就可以确定正在指定该行的确切部分。 如果我必须猜测的话,那就是 MAKEINTRESOURCE 调用,因为该宏执行各种转换,这些转换可能与这里无关 – 它定义为

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

IDC_WAIT 已定义为:

C++
#define IDC_WAIT            MAKEINTRESOURCE(32514)

所以很可能如果你删除 MAKEINTRESOURCE调用您的代码错误就会消失。

我还猜测您从不像您那么挑剔的人那里获取了代码:他们可能会忽略您不会(我也不会)的警告,因此从未将其视为问题。
还可以禁用特定代码块的特定警告: 警告#pragma | 微软学习[^] 如果你找不到其他方法来处理它。

コメント

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