【问题标题】:Implications of using non-unicode library with a unicode-built application在 unicode 构建的应用程序中使用非 unicode 库的含义
【发布时间】:2012-05-01 18:17:42
【问题描述】:

我想使用我的 unicode 构建的 MFC 应用程序中的非 unicode 库。但是,我不确定是否有可能发生意外的内存分配、非 unicode 库中的字符串处理等事件。

请解释任何含义或提供资源页面。

【问题讨论】:

  • 您想用您的应用程序构建一个库吗?您的应用程序是编译器/链接器吗?或者你的意思是你想从你的 unicode 应用程序中加载一个非 unicode 库?
  • 我的意思是我需要从我的 unicode 应用程序加载一个非 unicode 库。我需要了解此类库在 unicode 上下文下的行为。任何想法请。
  • 非unicode库也使用MFC吗?
  • 不,这个库不使用任何可视化 c++ 库/框架。但是,此库与其他几个非 unicode 库链接。这些库中的每一个都是从头开始编写的,没有使用流行的框架。

标签: windows visual-c++ unicode mfc


【解决方案1】:

应用程序是否是 Unicode 是编译时而非运行时的区别 - Unicode 可执行文件无法加载 ANSI DLL 没有内在原因。如果应用程序和 DLL 都使用 MFC,那么它们将链接到不同的 MFC 运行时,这可能会导致问题,但事实并非如此,您应该没问题。

您需要注意的是确保在 DLL 和应用程序之间传输的任何字符串数据都得到一致的解释。大多数情况下,这只是意味着根据需要在 ANSI 和 Unicode 之间进行转换,而 Windows 提供了 API 函数,使您可以轻松地完成此操作。

但是,您应该检查头文件中是否存在在为 Unicode 编译时与为 ANSI 编译时解释不同的任何数据类型。例如,如果 DLL 函数之一被声明为

DWORD process_string(TCHAR * string)

那么非 unicode 库会将 TCHAR 解释为 char,但您的应用程序会将其解释为 wchar_t,从而隐藏了您需要在调用函数之前将字符串转换为 ANSI 的事实。

【讨论】:

  • @ktai,如果你看到这个,你可以发布一个链接到这个的新问题,或者给我发电子邮件。但基本上,如果标题不兼容,您可以复制并修复它们,或者只使用转换,例如,process_string((TCHAR *)"hello")(但请确保包含注释来解释 为什么 你正在转换或它看起来像一个错误)。
猜你喜欢
  • 2011-04-22
  • 2010-12-11
  • 2010-09-28
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
相关资源
最近更新 更多