windows - 将非 unicode 库与 unicode 构建的应用程序一起使用的含义

标签 windows visual-c++ unicode mfc

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

请解释任何影响或提供资源页面。

最佳答案

应用程序是否是 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 的事实。

关于windows - 将非 unicode 库与 unicode 构建的应用程序一起使用的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10241540/

相关文章:

java - 在 Java 中查找所有驱动器号

windows - 在 Windows 中为文件名添加数字后缀

c++ - 使用 AssocQueryString 从 32 位应用程序获取 64 位应用程序命令,但无法正常工作

c++ - 调试时如何在 Visual C++ 2010 中跟踪/输出时间戳

php - 正则表达式:\w - UTF-8 中的 "_"+ "-"

Python2 : Using . decode with errors ='replace' 仍然返回错误

c++ - 在 C++ 中确定是 Linux 还是 Windows

java - 系统变量和用户变量如何工作

java - 当作为参数传递时,在 Java 中正确表示 ^A (Unicode\u0001)

c - 如何使用 MSVC 内在函数来获得这个 GCC 代码的等价物?