win32 创建进程无法将参数 2 从'char *__w64 '转换为'LPWSTR'错误
win32 CreateProcess cannot convert parameter 2 from 'char *__w64 ' to 'LPWSTR' error
hello all我有来自开源项目的代码,IM 集成到我的代码中。现在我在Visual Studio 2008字符集中的代码设置是Unicode。并且外部代码是多字节字符集。 添加新源后更改应用程序中的字符设置时我在我的代码中遇到其他错误.
所以从网上阅读我想我需要对外部代码进行一些更改以支持 Unicode。这是我的代码:
string FullPathToExe = c:\foo\boo.exe;
vector<char> str2(FullPathToExe.begin(), FullPathToExe.end());
str2.push_back(' ');
if (!CreateProcess(NULL,
&str2[0],
NULL,
NULL,
TRUE,
0,
NULL,
NULL,
&si,
&pi))
and the error is :
: error C2664: 'CreateProcessW' : cannot convert parameter 2 from 'char *__w64 '
to 'LPWSTR'
我不是Win32程序员,这对我来说是新的。
如何支持使用多字节和 Unicode 的开发人员?
感谢您的帮助
您需要
使用 std::wstring
和 vector<wchar_t>
并在字符串和字符前面加上 L 前缀。
对于第一个,请使用 vector<wchar_t>
而不是 vector<char>
。
对于第二个,请使用L"ERROR: API = %s.n error code = %d.n message = %s.n"
而不是"ERROR: API = %s.n error code = %d.n message = %s.n"
(请注意开头的L
。
改为执行以下操作:
wstring FullPathToExe = "c:\foo\boo.exe";
if (!CreateProcess(NULL,
FullPathToExe.c_str(),
NULL,
NULL,
TRUE,
0,
NULL,
NULL,
&si,
&pi))
a) 您可以在项目设置中取消定义 UNICODE 宏
b) 您可以使用您调用的函数的 ASCII 版本,将 wsprintf 替换为 sprintf,将 CreateProcess 替换为 CreateProcessA
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 将无符号char*转换为std::istream*C++