【问题标题】:Modifying C++ DLL to support unicode - common pitfalls to avoid?修改 C++ DLL 以支持 unicode - 要避免的常见陷阱?
【发布时间】:2009-05-04 18:53:40
【问题描述】:

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

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

我以前从未真正处理过 unicode,所以我想知道在执行此操作时是否应该注意任何常见的陷阱。是否应该像用适当的宏替换类型和方法名称一样简单,还是需要注意其他复杂情况?

【问题讨论】:

    标签: visual-c++ dll unicode


    【解决方案1】:

    首先阅读 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?

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

    【讨论】:

    • 我很喜欢的原始内存。我更担心我可能遇到的 Win API 问题,或者可能不会立即明显的极端情况。
    【解决方案2】:

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

    【讨论】:

    • 刚刚为 malloc grepped 并且它只在几个地方使用,并且只用于字符串缓冲区一次。 new 在大多数地方都使用(我宁愿在任何地方都使用它。我不喜欢混合分配技术)。我想我已经在这里了。
    猜你喜欢
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多