在基本 Win32 API 应用程序中从 'int' 到 'LPCSTR' 的无效转换
Invalid conversion from 'int' to 'LPCSTR' in a basic Win32 API app
最近开始学习Win32API,到现在每次都编译成功
我在资源文件(main.rc
和 resource.h
)中添加了一个图标,在包含 main.h
头文件(引用资源头文件的地方)之后,我得到了以下转换错误:
Error: invalid conversion from 'int' to 'LPCSTR' {aka 'const char*'}
[-f permissive]
note: in definition of macro 'IDI_MYICON'
我在网上查看了一些解决方案,但大多数(如果不是全部的话)都是关于非 Unicode 字符串,而不是资源。我是不是忘记了什么?
main.c 文件:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG msg;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_MYICON); //icon resource referenced here
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_MYICON); //icon resource referenced here as well
//.....
main.rc 文件:
#include "resource.h"
IDI_MYICON ICON "my_icon.ico"
main.h 文件:
#pragma once
#include "resource.h"
resource.h 文件:
#define IDI_MYICON 101
API 像 LoadCursor
和 LoadIcon
这样的函数将一个指向字符串的指针作为参数来指定要加载的资源,而不是整数(这就是 IDI_MYICON
是)。
原因是资源可以使用名称作为标识符,而不仅仅是数字标识符。
要在这些 API 中使用数字标识符,您需要将其转换为字符串指针。 API 为此提供了 MAKEINTRESOURCE
宏。
例如,wc.hIconSm = LoadIcon(NULL, MAKEINTRESOURCE(IDI_MYICON));
.
最近开始学习Win32API,到现在每次都编译成功
我在资源文件(main.rc
和 resource.h
)中添加了一个图标,在包含 main.h
头文件(引用资源头文件的地方)之后,我得到了以下转换错误:
Error: invalid conversion from 'int' to 'LPCSTR' {aka 'const char*'} [-f permissive]
note: in definition of macro 'IDI_MYICON'
我在网上查看了一些解决方案,但大多数(如果不是全部的话)都是关于非 Unicode 字符串,而不是资源。我是不是忘记了什么?
main.c 文件:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG msg;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_MYICON); //icon resource referenced here
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_MYICON); //icon resource referenced here as well
//.....
main.rc 文件:
#include "resource.h"
IDI_MYICON ICON "my_icon.ico"
main.h 文件:
#pragma once
#include "resource.h"
resource.h 文件:
#define IDI_MYICON 101
API 像 LoadCursor
和 LoadIcon
这样的函数将一个指向字符串的指针作为参数来指定要加载的资源,而不是整数(这就是 IDI_MYICON
是)。
原因是资源可以使用名称作为标识符,而不仅仅是数字标识符。
要在这些 API 中使用数字标识符,您需要将其转换为字符串指针。 API 为此提供了 MAKEINTRESOURCE
宏。
例如,wc.hIconSm = LoadIcon(NULL, MAKEINTRESOURCE(IDI_MYICON));
.