将 LPSTR 转换为 LPCTSTR

Converting LPSTR to LPCTSTR

本文关键字:LPCTSTR 转换 LPSTR      更新时间:2023-10-16

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

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

您的选择:

  1. 将项目设置更改为不使用 Unicode 字符集。
  2. 使用 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"。