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