C++ 如何在VisualStudio中处理unicode和非unicode项目的混合

C++ 如何在VisualStudio中处理unicode和非unicode项目的混合,c++,visual-studio,unicode,character-encoding,mfc,C++,Visual Studio,Unicode,Character Encoding,Mfc,前言:我知道微软使用的术语“Unicode”与微软世界之外的术语“Unicode”不一致。当我在下面使用“Unicode”时,我指的是“Windows中使用的UCS2”和Visual Studio生成设置的上下文 随着Visual Studio 2013的推出,微软最终将逐步淘汰MBCS构建。这就是促使我修复代码库以进入21世纪的原因,并为所有使用win32和MFC的代码切换到Unicode版本。但是,我们使用一些可移植的外部库,不使用任何特定于Windows且使用MBCS设置的库。我不希望识别

前言:我知道微软使用的术语“Unicode”与微软世界之外的术语“Unicode”不一致。当我在下面使用“Unicode”时,我指的是“Windows中使用的UCS2”和Visual Studio生成设置的上下文

随着Visual Studio 2013的推出,微软最终将逐步淘汰MBCS构建。这就是促使我修复代码库以进入21世纪的原因,并为所有使用win32和MFC的代码切换到Unicode版本。但是,我们使用一些可移植的外部库,不使用任何特定于Windows且使用MBCS设置的库。我不希望识别这些库和我们自己的代码之间的每个交互点,也不希望处理WideChartMultiByte()、ATL转换宏和随处可见的联合体

所以我的问题是:处理混合mbcs/Unicode构建的最佳实践是什么?是否有任何指导文档或示例应用程序


我希望有一种更好的方法,而不是为各种库中使用的所有类型使用转换运算符来定义自己的字符串类型:)

根据您的描述,这些库似乎是您自己的

我会将它们改为使用“使用通用文本映射” 这样,您就可以使用为Windows定义的UNICODE和UNICODE编译它们,而在其他系统上则不使用

但是你必须写一些像你自己的tchar一样的东西
(但非常简单,例如,只需将一堆ifdef映射到wprintf/printf即可)。

std::string
总是
std::string
。你确定你没有想到
tstring
?是的,这是一个错误的示例,我删除了它。取决于你在编写代码方面有多出色,这将是一场噩梦。。。真的:-)如果每个人都很好,只使用了
tstring
TCHAR
LPTSTR
LPCTSTR
malloc(x*sizeof(TCHAR))
(请注意
*sizeof(TCHAR)
),那么它只会是半个噩梦:-)然后在两/三年后,它会被清洗并用32->64位重复::-)Windows不等同于UNICODE和UCS-2。Windows使用UTF-16,其UNICODE支持允许代理项对,代理项对构成补充字符的32位编码(请参阅)。供您考虑: