我一直在用这个:
char appdata[250];
ExpandEnvironmentStrings("%AppData%\\\MCPCModLocator\\", appdata, 250);
在C ++ Win32中获取我的一个项目的AppData文件夹。它工作正常,没有问题。现在在我的最新项目(同样的PC,仍然在Visual Studio 2013中),当我尝试这样做时,我得到第一个字符串的错误说" const char *与LPCWSTR类型不兼容"在第二个参数上,它表示" char *与LPWSTR"类型不兼容。我不知道为什么它适用于第一个项目,而不是第二个项目。我假设它有一个设置更改,但查看每个项目设置,我什么也看不见。任何帮助表示赞赏!谢谢!
答案 0 :(得分:5)
ExpandEnvironmentStrings
是一个扩展为ExpandEnvironmentStringsA
或ExpandEnvironmentStringsW
的宏,具体取决于您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;字符集)