C ++ - ExpandEnvironmentStrings给出转换错误

时间:2015-06-01 01:16:28

标签: c++

我一直在用这个:

char appdata[250];
    ExpandEnvironmentStrings("%AppData%\\\MCPCModLocator\\", appdata, 250);

在C ++ Win32中获取我的一个项目的AppData文件夹。它工作正常,没有问题。现在在我的最新项目(同样的PC,仍然在Visual Studio 2013中),当我尝试这样做时,我得到第一个字符串的错误说" const char *与LPCWSTR类型不兼容"在第二个参数上,它表示" char *与LPWSTR"类型不兼容。我不知道为什么它适用于第一个项目,而不是第二个项目。我假设它有一个设置更改,但查看每个项目设置,我什么也看不见。任何帮助表示赞赏!谢谢!

2 个答案:

答案 0 :(得分:5)

ExpandEnvironmentStrings是一个扩展为ExpandEnvironmentStringsAExpandEnvironmentStringsW的宏,具体取决于您UNICODE时是否定义了<windows.h>

在Visual Studio项目中,默认情况下定义UNICODE,但编译器的命令行使用情况并非如此。

由于现代Windows编程更好地基于Unicode,因此最好的解决方法不是删除UNICODE的定义,而是在文字中添加L前缀,例如L"Hello",使其成为一个“宽”wchar_t的文字,并相应地更改appdata的类型。

答案 1 :(得分:3)

默认情况下,VS2013中新创建的项目已设置为使用Unicode API,这些API使用LPWSTR(或wchar_t *)代替LPSTR(或char *)。

您可以通过在函数名末尾添加“A”来调用旧的ANSI版本API,例如ExpandEnvironmentStringsA或更改项目配置以使用多字节字符集(项目属性页 - &gt;配置属性 - &gt;常规 - &gt;字符集)