尝试打开win32窗口时变量不兼容[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我正在关注手工制作的英雄系列,当我尝试编译时遇到一些错误,我正在运行Visual Studio 2017,这是一个错误的屏幕截图:

bugs

这是代码出现的问题:

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”类型的参数不兼容
c++ winapi
1个回答
0
投票

问题是由不兼容的类型混合引起的。虽然代码确保调用RegisterClassA(API的ANSI版本),但它无法提供匹配的WNDCLASS结构。这是在使用显式ANSI或Unicode调用的上下文中混合用于通用文本映射的类型。

最简单的解决方法是用WNDCLASS替换WNDCLASSA。更好的方法是了解ANSI,Unicode,以及为什么最好在整个代码中使用Windows API中的Unicode版本(Windows中的Unicode等同于UTF-16LE编码)。

首先阅读Conventions for Function Prototypes

© www.soinside.com 2019 - 2024. All rights reserved.