gpt4 book ai didi

c++ - 2 智能感知 : argument of type "const char *" is incompatible with parameter of type "LPCWSTR"

转载 作者:行者123 更新时间:2023-11-28 06:13:17 25 4
gpt4 key购买 nike

Stackflow 成员 ---- 我是 C++ WINAPI 的初学者 --- 当我在我的第一个 WIN32 GUI 中编码时,出现了一些错误 [输出] --- 是否有任何推荐的 C++ 高级书籍 ---我的代码:

#include <windows.h>
const char g_szClassName[] = ("myWindowClass");
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch(msg) {
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow) {
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = (g_szClassName);
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc)) {
MessageBox(NULL,
L"Window Registration Failed!",
L"Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
// Creating the Window
hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
(g_szClassName),
L"The title of my window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, NULL, NULL, hInstance, NULL);
if(hwnd == NULL) {
MessageBox(NULL,
L"Window Creation Failed!",
L"Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// Step 3: The Message Loop
while(GetMessage(&Msg, NULL, 0, 0) > 0) {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}

输出:

    3   IntelliSense: argument of type "const char *" is incompatible with parameter of type "LPCWSTR"  c:\Users\Youssef\Documents\Visual Studio 2012\Projects\Win32Project2\Win32Project2\Win32Project2.cpp    46  2   Win32Project2
2 IntelliSense: a value of type "const char *" cannot be assigned to an entity of type "LPCWSTR" c:\Users\Youssef\Documents\Visual Studio 2012\Projects\Win32Project2\Win32Project2\Win32Project2.cpp 34 19 Win32Project2
Error 1 error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source? c:\users\youssef\documents\visual studio 2012\projects\win32project2\win32project2\win32project2.cpp 65 1 Win32Project2

最佳答案

您遇到的编译问题与字符串类型和 Windows 程序有关。

请注意,Windows 程序有两种字符集“构建类型”。第一个是 MBCS,第二个是 Unicode。默认情况下(假设您使用的是 Visual Studio),构建类型是 Unicode,这意味着各种 Windows API 函数将处理宽字符串,而不是 char基于 char 的字符串。

解决您的问题的最简单方法是对字符数组使用 TCHAR,对要从 Windows API 函数发送和接收的字符串文字使用 _T() 宏。这将确保您的应用程序将针对 Unicode 和 MBCS 进行编译(尽管 MBCS 程序现在被认为在当今时代已经过时)。

这一行:

 wc.lpszClassName = (g_szClassName);  

给出了一个问题,因为您正在编译一个 Unicode 应用程序,并且 WNDCLASSEX 的这个成员采用了一个 LPCTSTR(指向 TCHAR 的指针) ,而不是 const char *

https://msdn.microsoft.com/en-us/library/windows/desktop/ms633577%28v=vs.85%29.aspx

所以对于这个问题,

const char g_szClassName[] = ("myWindowClass");

变化应该是:

#include <tchar.h> // in case it isn't included 
//...
TCHAR g_szClassName[] = _T("myWindowClass");

关于c++ - 2 智能感知 : argument of type "const char *" is incompatible with parameter of type "LPCWSTR",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30806882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com