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

Using mix of Unicode/Multibyte versions in libraries

本文关键字:Multibyte 版本 混合 Unicode      更新时间:2023-10-16

这里有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) thru b 定义的。
在编译 c 时,我会为func获取链接错误,因为它寻找 wstring版本的函数。

为了解决这个问题,我可以创建 unicode b 的版本,然后我可以在 c 中使用。

我的问题是,可以通过更改 lib a 本身中的某些内容来解决此链接器错误版本?

某人(在这个论坛之外)建议我添加

#if defined(USE_MULTIBYTE) || defined(USE_UNICODE) 
#else 
#if defined(UNICODE) || defined(_UNICODE) 
#define USE_UNICODE 
#endif 
#endif 
#if defined(USE_UNICODE) 
typedef std::wstring xString; 
#else typedef std::string xString; 
#endif 

在Lib A的标头文件中。

在所有3个库中,将string替换为相关API的xString
#define SM_USE_UNICODE是LIB C的标题文件。

这样,我不需要制作unicode版本的libB。
它实际上允许Lib C调用API的多字节版。
它看起来像从Unicode LIB调用多字节API,但起作用。

如果c访问avia b,则如果b做的不仅仅是在c和a之间运送指针,这三个更好地同意它们是否在unicode(大概是16位或更大)代码单元)或"多键"(8位代码单元)。

在我看来,您的链接器错误正在尝试准确防止此不匹配