C++-ExpandEnvironmentStrings给出转换错误
C++ - ExpandEnvironmentStrings Giving Conversion Error
我一直在使用这个:
char appdata[250];
ExpandEnvironmentStrings("%AppData%\MCPCModLocator\", appdata, 250);
在C++Win32中获取我的一个项目上的AppData文件夹。它运行良好,没有问题。现在,在我的最新项目上(同一台电脑,仍在Visual Studio 2013中(,当我尝试这样做时,我在第一个字符串上得到一个错误,说"const char*与类型LPCWSTR不兼容",在第二个参数上看到"char*与类型LPWSTR不匹配"。我不知道为什么它在第一个项目中有效,但在第二个项目中无效。我认为这是一个设置的改变,但纵观每个项目的设置,我什么也看不到。感谢您的帮助!谢谢
ExpandEnvironmentStrings
是一个扩展到ExpandEnvironmentStringsA
或ExpandEnvironmentStringsW
的宏,具体取决于在包含<windows.h>
时是否定义了UNICODE
。
在VisualStudio项目中,默认情况下会定义UNICODE
,但对于编译器的命令行使用,情况并非如此。
由于现代Windows编程更好地基于Unicode,因此最好的解决方案不是删除UNICODE
的定义,而是在文字中添加L
前缀,如L"Hello"
,这使其成为“宽";基于wchar_t
的文字,并相应地改变appdata
的类型。
默认情况下,VS2013中新创建的项目已设置为使用Unicode API,这些API使用LPWSTR(或,wchar_t*(而不是LPSTR(或,char*(。
您可以通过在函数名末尾添加"A"来调用旧的ANSI版本API,例如ExpandEnvironmentStringsA,或者将项目配置更改为使用多字节字符集(项目属性页->配置属性->常规->字符集(
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- C++使用params创建线程函数会导致转换错误
- 在混合代码库中将C转换为C++时出现许多包含错误
- 为什么g++在未执行的代码处标记强制转换错误
- 错误:从"int"到枚举c++的转换无效
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- 从标准::未来<void>到非标量标准::未来<bool>引发的错误转换
- 使用宏的错误转换
- 在 opencv 中使用 Color_YUV2BGR 从 YUV 到 BGR 的错误转换
- 无法通过此操作,因为类型的错误转换
- PyQt5:使用自定义信号时 int 对象的错误转换
- 从长途错误转换
- C 错误:转换为非量表类型
- C 错误:转换为执行字符集
- 使用SOCI从PostgreSQL数据库获取数据时发生错误转换
- 分段错误C++转换问题
- 在ARM上的Qt中从双精度到QString的错误转换
- C++浮点转换为Python浮点错误转换
- 错误:转换为非标量类型