将 LPSTR 转换为 LPCTSTR
Converting LPSTR to LPCTSTR
我有一个程序,我正在修改命令行参数作为LPSTR
类型的变量。目前,该值在程序中进行硬编码,并以 _T("program.exe")
的形式传递给所需的函数。该函数需要类型 LPCTSTR
。我试图将我的命令行参数从LPSTR
转换为LPCTSTR
无济于事。使用char*
作为中介的类似尝试也失败了。我知道我可能错过了一些愚蠢简单的东西,但在这一点上,我将不胜感激。
如果您的项目默认使用 Unicode,则_T("String")
将变为 L"String"
,这是一个宽字符字符串。 不能使用类型转换在宽字符字符串和 8 位字符串之间进行转换。
您的选择:
- 将项目设置更改为不使用 Unicode 字符集。
- 使用 Unicode 函数而不是 ANSI 函数。将应用程序入口点定义为
wWinMain
而不是WinMain
,以及要LPWSTR lpCmdLine
的命令行参数。
由于您正在处理命令行参数,因此您可能正在使用argv
.
相反,您应该使用 CommandLineToArgvW
函数,该函数生成类似 argv 的 Unicode 字符串数组。 链接文档的底部有示例代码,但它基本上是这样的:
argv_wide = CommandLineToArgvW(GetCommandLineW(), &argc_wide);
请注意,如果您以其他方式获取了 ANSI 字符串,例如,从文本文件中读取,您将使用 MultiByteToWideChar
函数来转换它。
通常 LPSTR 应该转换为 LPCTSTR。
但是,这显然不是您的情况,因此说明这对任何人都没有帮助。
如果您使用的是 Visual Studio,请转到"项目⟩ [项目名称] 属性"⟩"配置属性"⟩"常规"⟩"项目默认值",并将"字符集"的值更改为"使用多字节字符集">
如果您使用的是自定义.vcxproj
文件,则在每个文件中
<PropertyGroup Condition= "'$(Configuration)|$(Platform)'=='[Configuration]|[Platform]'" Label="Configuration"></PropertyGroup>
您需要添加一行,上面写着:
<CharacterSet>MultiByte</CharacterSet>
如果您已经有一个<CharacterSet>
,那么只需将其值更改为"MultiByte"。
相关文章:
- 如何在Windows上将Qt QString转换为LPCTSTR
- 将 LPSTR 转换为 LPCTSTR
- 无法从'const char *'转换为'LPCTSTR'
- 如何在 C++(MFC) 中将 char* 转换为 LPCTSTR
- 将浮点数转换为 LPCTSTR 转换
- 将WCHAR转换为LPCTSTR
- 将cryptopp :: Integer转换为lpctstr
- 仅分配第一个字符,将 LPCTSTR 转换为字符*
- 如何将 LPTSTR 转换为 LPCTSTR&
- 如何将char []转换为lpctstr
- CString 到 LPCTSTR 的转换会中断 sql 查询
- 无法将参数 1 从"const char [5]"转换为"LPCTSTR"
- CString 到 LPCTSTR 的转换
- LPCTSTR 到 LPCSTR 的转换
- 如何将字符数组转换为 LPCTSTR
- 错误 C2664:'CComboBox::InsertString':无法将参数 2 从 'const char [4]' 转换为 'LPCTSTR'
- 使用 sstream 将 int 转换为 LPCTSTR 时出现奇怪的结果
- 无法在 MFC / C++ 项目中将参数 1 从'const wchar_t *'转换为'LPCTSTR'
- win32 API createFile 函数:转换为 LPCTSTR
- 字符串转换为LPCTSTR