【问题标题】:variables incompatibility when trying to open a win32 window [duplicate]尝试打开win32窗口时变量不兼容[重复]
【发布时间】: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”类型的参数不兼容

【问题讨论】:

标签: c++ winapi


【解决方案1】:

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

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

从阅读Conventions for Function Prototypes开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    相关资源
    最近更新 更多