1

我正在对 C++ windows dll 库进行一些维护,该库需要使用不同的 VC++ 编译器(因为我不想处理不同的修改方案)。

我已经在界面中消除了对 STL 的任何使用。

我已经保证混合不同的新/删除不会发生堆损坏。

最后一项是例外。我可以抛出异常并期望它被不同版本的编译器正确捕获吗?

4

3 回答 3

8

即使考虑您的附加评论:只要 MS 更改编译器的 ABI 或异常类的类布局,甚至使用不同的编译器设置,这都会失败。事实上,即使使用相同的编译器,后者也可能导致失败。

所以我想答案是:不,你不能安全地做到这一点。如果要在可执行文件之间传递非 POD 对象,则应使用相同的编译器、相同的标准库和相同(在某种程度上)编译器设置来编译它们。

于 2009-11-13T14:23:07.287 回答
1

我希望这取决于编译器供应商,我认为该标准没有指定如何实现异常,因此它不能保证您的实现一致。

于 2009-11-13T14:12:47.613 回答
1

很可能不是。每个版本的编译器都有自己的运行时环境,完全不知道其他环境。除非供应商明确声明这是可能的,否则它很可能是不可能的。

于 2009-11-13T14:13:35.117 回答