这个问题在这里已有答案:
我正在关注手工制作的英雄系列,当我尝试编译时遇到一些错误,我正在运行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);
编译错误:
问题是由不兼容的类型混合引起的。虽然代码确保调用RegisterClassA
(API的ANSI版本),但它无法提供匹配的WNDCLASS
结构。这是在使用显式ANSI或Unicode调用的上下文中混合用于通用文本映射的类型。
最简单的解决方法是用WNDCLASS
替换WNDCLASSA
。更好的方法是了解ANSI,Unicode,以及为什么最好在整个代码中使用Windows API中的Unicode版本(Windows中的Unicode等同于UTF-16LE编码)。