【问题标题】:C++ DLL special charactersC++ DLL 特殊字符
【发布时间】:2014-06-06 19:57:06
【问题描述】:

我正在将用户生成的字符串从我的程序发送到我正在制作的 C++ DLL 函数中。它工作正常,直到我发送一个像“åäö”这样的字符串。我的函数看起来像这样:

export void showMessage(char* str) {
    MessageBox(NULL, str, "DLL says", MB_OK);
}

当程序发送“åäö”时,会弹出一条带有“åäö”的消息。如何将其转换为“åäö”?需要什么库?我正在为 DLL 使用 Code::Blocks。

【问题讨论】:

  • 没有理由将str 设为char * 而不是const char *。像这样的函数不允许将str.c_str() 用作无正当理由的参数。如果你想要 Unicode 字符,你应该使用 MessageBox 的宽版本。
  • 确实是utf-8。不是 MessageBoxA() 的系统代码页或 MessageBoxW() 需要的 utf-16 字符串。使用 MultiByteToWideString() 使后者工作。

标签: c++ non-ascii-characters


【解决方案1】:

您使用的字符似乎在扩展的 ASCII 表中(值大于 127),并且取决于您使用的代码页,这是一种不太便携的方法,因为运行您的代码的系统需要在程序本身之外进行环境更改。

不要使用MessageBox,而是使用支持Unicode 的版本MessageBoxW,并查找您指定的字符的Unicode 编码。

参考文献


  1. 函数的 Unicode 版本和 ANSI 版本,于 2014 年 6 月 6 日访问,<http://zone.ni.com/reference/en-XX/help/371361J-01/lvexcodeconcepts/unicode_ansi_version_functs/>
  2. ASCII 表查找,于 2014 年 6 月 6 日访问,<http://www.theasciicode.com.ar/extended-ascii-code/capital-letter-a-ring-uppercase-ascii-code-143.html>
  3. Unicode 查找,于 2014 年 6 月 6 日访问,<http://unicodelookup.com/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 2011-08-15
    • 1970-01-01
    相关资源
    最近更新 更多