修改C ++ DLL以支持unicode - 避免常见的陷阱?

时间:2009-05-04 18:53:41

标签: visual-c++ dll unicode

我有一个目前只支持ASCII的Windows DLL,我需要更新它才能使用Unicode字符串。此DLL当前在许多地方使用char *字符串,同时进行许多ASCII Windows API调用(如GetWindowTextA,RegQueryValueExA,CreateFileA等)。

我想切换到使用VC ++中定义的unicode / ascii宏。所以我不使用char或CHAR而是使用TCHAR。对于char *我会使用LPTSTR。我认为像sprintf_s这样的东西会改为_stprintf_s。

我之前从未真正处理过unicode,所以我想知道在做这个时我是否应该注意一些常见的陷阱。它应该只是简单地用适当的宏替换类型和方法名称就足够了,还是有其他复杂因素需要注意?

2 个答案:

答案 0 :(得分:4)

首先阅读Joel Spolsky的这篇文章:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

然后在Stack Overflow上运行这些链接:What do I need to know about Unicode?

通常,您正在寻找任何代码,假设一个字符=一个字节(内存/缓冲区分配等)。但是上面的链接会给你一个很好的细节概述。

答案 1 :(得分:1)

最大的危险可能是缓冲区大小。如果您的内存分配是根据sizeof(TCHAR)进行的,那么您可能会没问题,但是如果有原始程序员假设每个字符都是1个字节且他们在malloc语句中使用整数的代码,则很难做到全球搜索。