我有一个C ++库,我将其交付给其他开发人员。其中一个需要i18n,所以他问我是否可以在API中为字符串添加L前缀。
我对i18n了解不多,所以我有一些基本的问题:
当我使用Unicode编译我的lib时,其他开发人员可以照常使用此版本吗?或者开发人员是否还应将其Visual Studio设置更改为使用unicode? p>
当我使用Unicode编译lib时,是否需要更改header和.cpp文件中的所有字符串?或者将L前缀添加到头文件中的字符串是否足够?
提前致谢!
保
答案 0 :(得分:3)
对国际化(i18n)的支持不仅仅是Unicode。在我的头顶,有:
大部分内容都是以某种形式通过AP上的窗口提供的,无论是Win32还是.Net等。我建议你看一下:
答案 1 :(得分:3)
添加L前缀会将char
数组中的字符串更改为short
数组。更好的选择是用“TEXT”宏包装所有字符串,即
TEXT("My string")
如果您的构建是Unicode构建,则所有字符串都将成为short
的数组,但如果不是,则它们将保留为char
的数组。 Windows还提供以下类型:
LPWSTR = short *
LPTSTR = short *, or char * if UNICODE not defined
LPSTR = char *
不要忘记;即使你已经将L作为前缀或将TEXT
包裹在你的字符串中,你需要确保你正在调用正确的函数。如果定义lstrlen
,标准Windows字符串API(例如char *
)会自动从short *
切换到UNICODE
,但您需要确保不使用仅限char *
的函数使用char
。
您的库导出使用字符串的函数也会破坏使用您的库的旧应用程序,因为这些应用程序仍然会传递short
而不是{{1}}的数组,因此您可能会我希望在那里有某种向后兼容性。