lpcwstr与char类型不匹配(到 LPCWSTR 的类型不兼容,这是怎么回事啊)

本文目录
- 到 LPCWSTR 的类型不兼容,这是怎么回事啊
- VC++ LPWSTR类型的实参与char*类型的形参不兼容
- LPWSTR和char*是什么关系,这段代码求解决问题
- LPCWSTR无法转换char
- const char *“ 类型的实参与 “LPCWSTR“ 类型的形参不兼容
- 在vs中char类型的实参与LPCWSTR类型的形参类型不兼容怎么解决
到 LPCWSTR 的类型不兼容,这是怎么回事啊
开头#include 《TCHAR.h》
sprintf(...)
改为
_stprintf(...)
然后所有双引号字符串或单引号的字符
"Mouse Clicking" ’A’
这样的都改为
_T("Mouse Clicking") _T(’A’)
所有
char
改为
TCHAR
原因在于字符(串)实际上有char(*)(LPSTR,LPCSTR)和wchar_t(*)(LPWSTR,LPCWSTR)两种类型,这两种类型有各自的一套字符串操作函数(包括基础库、windowsAPI等都是),而windows程序通常会默认使用wchar_t系列,因此所有字符串都需要wchar_t*类型,所有函数都用wchar_t匹配的函数。
而_T()则是自动将字符串转换为对应类型的字符串,_stprintf函数(实际上是宏)会自动匹配应有的函数(char匹配sprintf,wchar_t匹配swprintf)
事实上所有涉及字符串的函数大多都是三个一组的,比如图中涉及的有:
sprintf,swprintf,_stprintf
MessageBoxA,MessageBoxW,MessageBox
……
三个函数依次为:char专用函数,wchar_t专用函数,变化匹配函数(虽设置环境自动匹配char或wchar_t)
VC++ LPWSTR类型的实参与char*类型的形参不兼容
在UNICODE字符集下,CString存储方式是WCHAR宽字节。
如果你的加密算法始终要求char模式,那么放弃使用CString直接使用char* 就可以了。
如果无法避免宽字节字符串,那么安全的办法是通过WideCharToMultiByte函数,将UNICODE字符串转换为宽字节的char*在进行DES加密。
变通的办法(存在字符串转换的隐患)是直接将WCHAR通过内存复制方式给char*进行加密,复制长度为:ytr.GetLength()*sizeof(TCHAR)
LPWSTR和char*是什么关系,这段代码求解决问题
这是UNICODE的问题, vc里项目“属性-》常规-》字符集”这个选项控制是使用unicode还是多字节, unicode对应的就是LPWSTR, 16位, 多字节就是char, 8位。 LPWSTR的最终宣告是unsigned short, 可见是16位的。MFC里有一个很容易的unicode转ansi的宏, USES_CONVERSION, 通过W2A就可以把LPWSTR转换为char*
LPCWSTR无法转换char
1e:\vs2008\实验\实验\c.cpp(28) : error C2440: “=”: 无法从“const char ”转换为“LPCWSTR”1 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换1e:\vs2008\实验\实验\c.cpp(74) : error C2146: 语法错误 : 缺少“)”(在标识符“,”的前面)1e:\vs2008\实验\实验\c.cpp(74) : error C2660: “MessageBoxW”: 函数不接受 2 个参数1e:\vs2008\实验\实验\c.cpp(74) : error C2059: 语法错误 : “)”1e:\vs2008\实验\实验\c.cpp(80) : error C2664: “PostQuitMessage”: 不能将参数 1 从“HWND”转换为“int”1 没有使该转换得以执行的上下文1e:\vs2008\实验\实验\c.cpp(83) : error C3861: “DelWindowProc”: 找不到标识符1生成日志保存在“file://e:\vs2008\实验\实验\Debug\BuildLog.htm”1实验 - 13 个错误,0 个警告========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========补充:
const char *“ 类型的实参与 “LPCWSTR“ 类型的形参不兼容
修改如下:把工程属性 -》 配置属性 -》常规 -》 字符集 的“使用unicode字符集“改为“使用多字节字符集”。
在vs中char类型的实参与LPCWSTR类型的形参类型不兼容怎么解决
LPCWSTR是宽字符集,每个字符占两个字节运歼键
char西旁巧文占一个字节,中文改历占两个字节
如果想完全搞清楚这个问题, 会自己转换,去好好学一下unicode

更多文章:
animate快捷键大全(adobe animate新建空白关键帧和切换下一帧快捷键是什么)
2026年10月1日 23:40
lpcwstr与char类型不匹配(到 LPCWSTR 的类型不兼容,这是怎么回事啊)
2026年10月1日 22:30
设计一个矩形类rectangle(设计一个矩形类,按以下要求编写程序 求解 求正确答案完整答案 这是Java的题目)
2026年10月1日 22:20
int和integer(int 和 Integer 有什么区别)
2026年10月1日 21:30
method怎么记忆(怎么区分way,means,method)
2026年10月1日 17:40
领域驱动设计 软件核心复杂性应对之道(领域模型驱动设计(DDD)之模型提炼)
2026年10月1日 17:00




