在库中使用Unicode / Multibyte版本的混合

时间:2017-11-22 08:52:34

标签: c++ winapi visual-studio-2015

以下是3个具有以下Character Set支持的图书馆:
Lib A (支持Unicode和Multibyte)
Lib B (仅限多字节)
Lib C (仅限Unicode)

A 的功能在Unicode和Multibyte(例如:void func(string s))的情况下不同,并且在 A 的头文件中控制为:

#if defined(UNICODE) || defined(_UNICODE)
#define string wstring
#endif

B 使用 A 的多字节版本 C 使用 B 的多字节版本。

现在我正在更改 C ,它使用上面定义的void func(string s) B
在编译 C 时,func因为查找wstring版本的函数而感到链接器错误

要解决此问题,我可以创建 B 版本 B ,然后我可以在 C 中使用。

我的问题是,是否可以通过更改 Lib A 本身的内容来解决此链接器错误,这样我就不需要使 B Unicode 版本?

2 个答案:

答案 0 :(得分:0)

有人(在此论坛之外)建议我添加

string

在Lib A的头文件中。

将相关API的所有3个库中的xString替换为#define SM_USE_UNICODE db->query是Lib C的头文件。

这样我就不需要制作Lib B的Unicode版本了 它实际上允许Lib C调用多字节版本的API 从unicode lib调用多字节API看起来很糟糕,但它确实有效。

答案 1 :(得分:-1)

如果C通过B访问A,那么如果B做的不仅仅是在C和A之间发送一个指针,那么所有三个人都更好地同意它们是用Unicode工作(大概是16位还是更大的代码单元)还是“多字节” (8位代码单元)。

在我看来,你的链接器错误试图阻止这种不匹配