【发布时间】:2019-02-20 19:45:16
【问题描述】:
我正在关注手工制作的英雄系列,在尝试编译时遇到了一些错误,我正在运行 Visual Studio 2017 这是错误的屏幕截图:
出现问题的代码如下:
int CALLBACK
WinMain(HINSTANCE Instance,
HINSTANCE PrevInstance,
LPSTR CommandLine,
int ShowCode)
{
WNDCLASS WindowClass = {};
// TODO(casey): Check if HREDRAW/VREDRAW/OWNDC still matter
WindowClass.lpfnWndProc = Win32MainWindowCallback;
WindowClass.hInstance = Instance;
// WindowClass.hIcon;
WindowClass.lpszClassName = "HandmadeHeroWindowClass";
if (RegisterClassA(&WindowClass))
{
HWND WindowHandle =
CreateWindowExA(
0,
WindowClass.lpszClassName,
"Handmade Hero",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
0,
0,
Instance,
0);
编译错误:
- “const char *”不能分配给“LPCWSTR”类型的实体
- “WNDCLASS *”与“const WNDCLASSA *”类型的参数不兼容
- “LPCWSTR”与“LPCSTR”类型的参数不兼容
【问题讨论】:
-
您正在编译宽字符,但您的代码使用窄字符串和 A 函数。
-
首先使用
HWND WindowHandle = CreateWindowEx(...)和_T("Handmade Hero")。 -
@jww:没有令人信服的理由使用generic-text mappings。代码不会针对不同的系统进行编译,其中一个系统只支持一组 API 版本(ANSI 或 Unicode)。