Error:不能将"char*"类型的值分配到"LPSTR"类型的实体 也许 "char*"类型的实参与"LPCWSTR"类型的形参不兼容...

本文介绍如何在Visual Studio 2012中为项目配置多字节字符集,通过更改配置属性来解决特定的字符集问题。

http://www.myexception.cn/ruby-rails/1876106.html

选择“XXX项目”-属性”-配置属性”-常规选项中,把使用 Unicode 字符集改为使用多字节字符集,然后确定。如下图(VS2012):

#include<iostream> using namespace std; #include<Windows.h> #pragma warning(disable:4996) void __cdecl OutputDebugStringF(const char* format, ...) { va_list vlArgs; char* strBuffer = (char*)GlobalAlloc(GPTR, 4096); va_start(vlArgs, format); _vsnprintf(strBuffer, 4096 - 1, format, vlArgs); va_end(vlArgs); strcat(strBuffer, "\n"); OutputDebugStringA(strBuffer); GlobalFree(strBuffer); return; } #define DbgPrintf OutputDebugStringF HINSTANCE hAppInstance; LRESULT CALLBACK WindowProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // TODO: Place code here. hAppInstance = hInstance; //窗口的类名 PSTR className = (PCHAR)"My First Window"; // 创建窗口类的对象 WNDCLASS wndclass = { 0 }; //一定要先将所有 wndclass.hbrBackground = (HBRUSH)COLOR_MENU; //窗口的背景色 wndclass.hCursor = LoadCursor(NULL, IDC_APPSTARTING); wndclass.lpfnWndProc = WindowProc; //窗口过程函数 wndclass.lpszClassName = (LPCWSTR)className; //窗口类的名字 wndclass.hInstance = hInstance; //定义窗口类的应用程序的例句柄 // 注册窗口类 // 参加MSDN文档RegisterClass->Parameters: // You must fill the structure with the appropriate class attributes // before passing it to the function. RegisterClass(&wndclass); // 创建窗口 HWND hwnd = CreateWindow( className, //类名 L"我的第一个窗口", //窗口标题 WS_OVERLAPPEDWINDOW, //窗口外观样式 10, //相对于父窗口的X坐标 10, //相对于父窗口的Y坐标 600, //窗口的宽度 300, //窗口的高度 NULL, //父窗口句柄,为NULL NULL, //菜单句柄,为NULL hInstance, //当前应用程序的句柄 NULL); //附加数据一般为NULL if (hwnd == NULL) //是否创建成功 return 0; // 显示窗口 ShowWindow(hwnd, SW_SHOW); // 更新窗口 UpdateWindow(hwnd); // 消息循环 MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } LRESULT CALLBACK WindowProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { //窗口消息 case WM_CREATE: { DbgPrintf("WM_CREATE %d %d\n", wParam, lParam); CREATESTRUCT* createst = (CREATESTRUCT*)lParam; DbgPrintf("CREATESTRUCT %s\n", createst->lpszClass); break; } case WM_MOVE: { DbgPrintf("WM_MOVE %d %d\n", wParam, lParam); POINTS points = MAKEPOINTS(lParam); DbgPrintf("X Y %d %d\n", points.x, points.y); break; } case WM_SIZE: { DbgPrintf("WM_SIZE %d %d\n", wParam, lParam); int newWidth = (int)(short)LOWORD(lParam); int newHeight = (int)(short)HIWORD(lParam); DbgPrintf("WM_SIZE %d %d\n", newWidth, newHeight); break; } case WM_DESTROY: { DbgPrintf("WM_DESTROY %d %d\n", wParam, lParam); PostQuitMessage(0); return 0; break; } //键盘消息 case WM_KEYUP: { DbgPrintf("WM_KEYUP %d %d\n", wParam, lParam); break; } case WM_KEYDOWN: { DbgPrintf("WM_KEYDOWN %d %d\n", wParam, lParam); break; } //鼠标消息 case WM_LBUTTONDOWN: { DbgPrintf("WM_LBUTTONDOWN %d %d\n", wParam, lParam); POINTS points = MAKEPOINTS(lParam); DbgPrintf("WM_LBUTTONDOWN %d %d\n", points.x, points.y); break; } default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } return 0; }"PSTR" (aka "char *") 类型参与 "LPCWSTR" (aka "const WCHAR *") 类型形参不兼容 “HWND CreateWindowExW(DWORD,LPCWSTR,LPCWSTR,DWORD,int,int,int,int,HWND,HMENU,HINSTANCE,LPVOID)”: 无法将参数 2 从“PSTR”转换为“LPCWSTR
11-10
#include<windows.h> // 窗口处理函数(自定义,处理消息) LRESULT CALLBACK WndProc(HWND hWnd, UINT msgID, WPARAM wParam, LPARAM lParam) { return DefWindowProc(hWnd, msgID, wParam, lParam); } // 入口函数 int CALLBACK main(HINSTANCE hIns, HINSTANCE hPerIns, LPSTR lpCmdLine, int nCmdShow) { // 注册窗口类 --> 向系统的内核写入一些数据 WNDCLASS wc = { 0 }; // 结构体变量 wc.cbClsExtra = 0; // 开缓冲区 --> n 字节的缓冲区 wc.cbWndExtra = 0; // 开缓冲区 另一种缓冲区 wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // 背景色 wc.hCursor = NULL; // 默认光标位置 wc.hIcon = NULL; // 默认图标 wc.hInstance = hIns; // 当前程序例句柄 wc.lpfnWndProc = WndProc; // 窗口处理函数 wc.lpszClassName = L"窗口类名字"; // 窗口类的名字 wc.lpszMenuName = NULL; // 没有菜单 wc.style = CS_HREDRAW | CS_VREDRAW; // 水平或者垂直有变化,重画窗口 // 将上面复制写入操作系统 RegisterClass(&wc); // 内存中创建窗口 HWND hWnd = CreateWindow("窗口类名字", "标题", WS_OVERLAPPEDWINDOW, 100, 100, 100, 100, NULL, NULL, hIns, NULL); //HWND hWnd = CreateWindow("窗口类名字","标题",WS_OVERLAPPEDWINDOW,x,y,w,h,父窗口,菜单,hIns,NULL); // WS_OVERLAPPEDWINDOW最后一个参数窗口风格 // 父窗口,菜单没有就置位NULL // 最后一个参数没用,置为NULL // 显示窗口 ShowWindow(hWnd, SW_SHOW); // 风格 SW_SHOW 原样显示 UpdateWindow(hWnd); // 刷新 --> 再画一遍 // 消息循环 MSG nMsg = { 0 }; while (GetMessage(&nMsg, NULL, 0, 0)) { TranslateMessage(&nMsg); // 翻译消息 DispatchMessage(&nMsg); // 派发消息,交给窗口处理函数来处理 } return 0; } 严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息 错误(活动) E0167 "const char *" 类型参与 "LPCWSTR" (aka "const WCHAR *") 类型形参不兼容 Project5 C:\Users\17116\source\repos\Project5\Project5\源.cpp 24 不动函数怎么改
最新发布
11-10
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值