我正在修改一个程序,将命令行参数作为LPSTR
类型的变量。目前,该值在程序中是硬编码的,并以_T("program.exe")
的形式传递给所需的函数。该函数需要类型LPCTSTR
。我试图将命令行参数从LPSTR
转换为LPCTSTR
无效。使用char*
作为中间人的类似尝试也失败了。我知道我可能错过了一些简单的东西,但在这一点上我会很感激帮助。
答案 0 :(得分:4)
如果您的项目默认使用Unicode,_T("String")
将变为L"String"
,这是一个宽字符字符串。您不能使用类型转换在宽字符串和8位字符串之间进行转换。
您的选择:
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”。