将LPSTR转换为LPCTSTR

时间:2017-06-08 15:42:49

标签: c++ c winapi

我正在修改一个程序,将命令行参数作为LPSTR类型的变量。目前,该值在程序中是硬编码的,并以_T("program.exe")的形式传递给所需的函数。该函数需要类型LPCTSTR。我试图将命令行参数从LPSTR转换为LPCTSTR无效。使用char*作为中间人的类似尝试也失败了。我知道我可能错过了一些简单的东西,但在这一点上我会很感激帮助。

3 个答案:

答案 0 :(得分:4)

如果您的项目默认使用Unicode,_T("String")将变为L"String",这是一个宽字符字符串。您不能使用类型转换在宽字符串和8位字符串之间进行转换。

您的选择:

  1. 将项目设置更改为不使用Unicode字符集。
  2. 使用Unicode函数而不是ANSI函数。将您的应用程序入口点定义为wWinMain而不是WinMain,并将命令行参数定义为LPWSTR lpCmdLine

答案 1 :(得分:4)

由于您正在处理命令行参数,因此您可能正在使用argv

您应该使用CommandLineToArgvW函数,它会生成类似argv的Unicode字符串数组。链接文档的底部有示例代码,但它基本上是这样的:

argv_wide = CommandLineToArgvW(GetCommandLineW(), &argc_wide);

请注意,如果您以其他方式获取了ANSI字符串,例如,从文本文件中读取,则应使用MultiByteToWideChar函数进行转换。

答案 2 :(得分:-2)

通常LPSTR应转换为LPCTSTR。

但是,显然不是你的情况,所以说这对任何人都没有帮助。

如果您正在使用Visual Studio,请进入项目⟩[项目名称]属性⟩配置属性⟩常规⟩项目默认值并将字符集的值更改为“使用多字节字符集”

如果您在每个

内使用自定义.vcxproj文件
<PropertyGroup Condition= "'$(Configuration)|$(Platform)'=='[Configuration]|[Platform]'" Label="Configuration"></PropertyGroup>

您需要添加一行说明:

<CharacterSet>MultiByte</CharacterSet>

如果您已经有<CharacterSet>,那么只需将其值更改为“MultiByte”。