gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:49:19 27 4
gpt4 key购买 nike

我有一个项目使用了两个第三方库,它们都在头文件中使用了 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com