2012-09-05 33 views
2

假设我有一个visual C++应用程序,它有一个主要的可执行文件和许多dll。我有2个配置版本和调试。混合发布dll与调试主应用程序exe

我只是想知道这将是使用混合可能产生的影响,我的意思是使用与释放的主要EXE或调试EXE与释放的dll调试DLL使用。

感谢

回答

2

我认为主要的潜在问题将是这些DLL不会使用相同的运行时库的可执行文件。

这意味着你不能共享的运行对象如文件描述符,你不能在一个内存分配和释放它在其他 - 但如果你遵循最佳实践,始终这不会是一个问题从它分配的相同模块释放内存。

也有可能是一个问题,如果你分享非POD的DLL和可执行之间(一个类的实例,例如)。我不确定在调试和发布之间是否保证类实例是二进制兼容的。

+0

当您尝试DUP()在调试主要应用在你得到一个异常(无效参数)释放DLL后分配的文件描述符。所以在混合释放和调试时要小心。 –

+0

@MikeLischke:是的,任何使用运行时库错误实例的文件描述符都是无效的。它可以是未分配的描述符,也可以是不同文件对象的描述符。 (没有什么能够阻止两个运行时库发送数字相同的描述符。) –

+0

这里让我感到惊讶的是,我得到一个异常而不是一个错误结果,这对于一个低级运行时API来说是非常不寻常的,它可以给你一些如果您只准备处理返回值,则会产生额外的麻烦。 –