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

时间:2012-04-20 06:48:31

标签: windows visual-c++ unicode mfc

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

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

1 个答案:

答案 0 :(得分:2)

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