c++ - 处理具有不同字符集的库的头文件中的 TCHAR

标签 c++ libraries tchar

我有一个项目使用了两个第三方库,它们都在头文件中使用了 TCHAR。不幸的是,一个库被编译为多字节(称为库 a),另一个被编译为 Unicode(称为库 b)。

现在我的理解是 TCHAR 被预编译器替换为 wchar 或 char,具体取决于构建选项。因此,当库 a 被编译时,任何采用 TCHAR 类型参数的方法都被设置为期望一个 char 类型的参数,而库 b 中的方法被设置为期望一个 wchar 类型的参数。

不幸的是,我的消费应用程序也必须选择一个字符集。如果我选择 Unicode,那么我为库 a 包含的头文件告诉我该方法需要一个 wchar,因为当我编译头中的 TCHAR 时,它们被解释为 wchar。这包括在结构内部定义的 TCHARS。我已经在实践中证实了这种行为,当我分配并传递一个 TCHAR 缓冲区时,我得到了垃圾,因为它用多字节数据填充了我的 wchar 缓冲区。

我的问题是:是否有一种干净的方法可以在同一个应用程序中使用这两个库?我使用这些库的方式是否有问题?

最佳答案

假设您没有在这些库中的任何一个中使用太多的类/函数,我会完全包装其中一个库。假设您决定在您的应用程序中使用 mbc 并包装库 b (unicode),您的包装器头文件可以使用 wchar_t 而不是 TCHAR 所以#define 不会影响您的界面。在包装器的 cpp 文件中,#include 库 b 的 header ,#define TCHAR 以匹配库 b。除了您的包装器之外,不允许任何代码访问库 b。

如果您在这两个库中使用了多个类/函数,维护包装器代码将很快成为一个问题。

关于c++ - 处理具有不同字符集的库的头文件中的 TCHAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/813898/

相关文章:

c++ - 迭代 vector 和其他 STL 容器的样式之间的区别

Glassfish v3 集群配置类路径库

visual-studio-2010 - 为什么在 C++/CLI 中写入时会出现未处理的异常访问冲突?

c++ - QCommandLineParser 向参数添加功能

c++ - 如何计算 C++ 中字符数组中的单词

c++ - 相同生成器值的 std::normal_distribution 结果?

ios - 如何将缺少的库和框架正确添加到现有 Xcode 项目中

android - Eclipse 中的 "Android Private Libraries"文件夹是什么?

c++ - 用户定义的转换运算符作为 printf 的参数

C++ Windows 如何将 'unsigned int' 转换为 'TCHAR *'?