我在Visual Studio 2012上的项目属性中看到,您可以为应用程序选择字符集。
我使用Unicode字符集。 多字节字符集有什么问题?或者更好的是,我为什么要使用Unicode? p>
以我正在做的DLL中的这段代码为例
RECORD_API int startRecording(
char *cam_name, // Friendly video device name
char *time, // Max time for recording
char *f_width, // Frame width
char *f_height, // Frame height
char *file_path) // Complete output file path
{
...
}
Windows.h头文件中的许多Unicode函数都使用wchar_t参数;我是否应该将wchar_t用于我的函数参数?
我是否应该始终显示W函数(例如:ShellExecuteW)?
答案 0 :(得分:3)
首先,无论界面说什么,问题都不是 是否为Unicode,但UTF-16或UTF-8。实际上,对于 外部数据,你应该只使用UTF-8。在内部,它 取决于你在做什么。将UTF-8转换为UTF-16是 一个额外的复杂性,但对于更复杂的操作,它可能 更容易在UTF-16中工作。 (虽然之间存在差异 UTF-8和UTF-16并不是很大。要获得任何真正的好处, 你必须使用UTF-32,即便如此......)
在实践中,我会完全避免使用W功能
始终在系统接口级别使用char const*
。但
再次,这取决于你在做什么。这只是一般情况
指南。对于其他人,除非,否则我会坚持使用std::string
有一些强烈的理由不这样做。
答案 1 :(得分:1)
您不需要显式调用函数的..W
版本,因为这应该已经包含在您使用的包含文件和设置中。因此,如果您编译Unicodesupport,则将使用系统调用的W
版本,否则使用A
。
就个人而言,如果你能真正测试它,我只会编译Unicode。至少你不应该假设你的应用程序在所有情况下都能正常工作,只是因为你为它编译了。编译它只是第一步,但当然,你必须使用适当的类型并测试你的代码,以确保没有你可能没有注意到的效果。