2012-04-20 43 views
2

我想从使用unicode构建的MFC应用程序使用非unicode库。但是,我不确定是否有发生事件的可能性,如非意图内存分配,非Unicode代码库内部的字符串处理。对使用​​unicode构建的应用程序使用非unicode库的影响

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

+0

你想用你的应用程序构建一个库?你的应用程序是编译器/链接器吗?或者你的意思是你想从你的unicode应用程序加载一个非unicode库? – 2012-04-22 00:42:50

+0

我的意思是我需要从我的unicode应用程序加载一个非unicode库。我需要了解这种库在unicode环境下的行为。任何想法请。 – nimoz 2012-04-23 04:16:25

+0

非unicode库是否也使用MFC? – 2012-04-23 04:35:31

回答

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。

+0

@ktai,如果你看到这个,你可以发布一个新的问题链接到这个,或给我发电子邮件。但基本上如果头文件不兼容,你可以复制并修复它们,或者只是使用强制转换,例如'process_string((TCHAR *)“hello”)'(但要确保包含注释来解释* why * you '重铸或它看起来像一个错误)。 – 2015-11-30 20:04:49