4

我在 Visual Studio 2012 的项目属性中看到您可以为您的应用程序选择字符集。

我使用 Unicode 字符集。多字节字符集有什么问题?或者更好的是,我为什么要使用 Unicode?

以我正在做的 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)?

4

2 回答 2

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 除非 有充分的理由不这样做,否则我会坚持下去。

于 2013-06-17T11:31:04.943 回答
1

您不需要显式调用..W函数的版本,因为它应该已经包含在包含文件和您使用的设置中。因此,如果您为 Unicode 支持进行编译,则将W使用您的系统调用的版本,否则将使用A.

如果你真的可以测试它,我个人只会为 Unicode 编译。至少你不应该仅仅因为你为它编译就认为你的应用程序在所有情况下都可以正常工作。编译它只是第一步,但当然,您必须因此使用适当的类型并测试您的代码,以确保没有您可能没有注意到的影响。

于 2013-06-17T11:25:44.897 回答