代码之家  ›  专栏  ›  技术社区  ›  Herms

修改C++ DLL以支持Unicode——避免常见陷阱?

  •  1
  • Herms  · 技术社区  · 17 年前

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

    我想切换到使用VC++中定义的unicode/ascii宏。因此,我将使用TCHAR而不是char或char。对于char*我会使用LPTSTR。我认为像sprintf_s这样的东西会被改成stprintf_s。

    我以前从未真正处理过unicode,所以我想知道在进行此操作时是否有任何常见的陷阱。它应该仅仅像用适当的宏替换类型和方法名那样简单就足够了,还是有其他复杂的问题需要注意?

    2 回复  |  直到 17 年前
        1
  •  4
  •   halfer Jatin Pandey    7 年前

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

    然后在堆栈溢出时运行以下链接: What do I need to know about Unicode?

    任何 (内存/缓冲区分配等)。但是上面的链接会给你一个非常好的细节概述。

        2
  •  1
  •   Clyde    17 年前

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