使用库中的Unicode/Multibyte版本的混合
Using mix of Unicode/Multibyte versions in libraries
这里有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位代码单元)。
在我看来,您的链接器错误正在尝试准确防止此不匹配
相关文章:
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 导入库可以跨dll版本工作吗
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 在clang++预处理器中确定gcc工具链版本
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 不同的Visual Studio版本中缺少.dll
- 用符号版本替换对函数的所有调用
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 我需要分发哪些版本的可再分发文件
- CV_OCL_RUN宏如何在OpenCV(版本3.4.5)的goodFeaturesToTrack实现中工作?
- 在运行时读取 libstdc++ 版本
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- Vulkan SDK 版本 1.1.85.0 在 Kubuntu 18.10 上链接
- 如何正确实现与基类不同的版本?
- 从预处理器获取 Windows 版本(C++ Win32)
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 如何在C++中将 Python 字符串转换为其转义版本?
- 使用库中的Unicode/Multibyte版本的混合