1

我有一个由 c++ 和 c# 项目组合而成的大型解决方案,其中大部分输出 dll。我们还有一个可执行文件,它取决于这些项目的输出。我们的整个解决方案目前是在 VS2005 中构建的。由于多种原因,我们的构建必须针对 v80,但我们终于找到时间迁移到 2010 IDE。

当我们在 2010 年构建时,我们的解决方案都可以正常编译,但是在运行应用程序时我们遇到了访问冲突。此异常发生在许多场景中,但始终在代码中的同一点发生 - 它还显示为“在用户回调期间遇到的异常”。如果我们编辑掉抛出异常的代码行,它只是移动到其他地方,这是有道理的。我们遇到问题的场景如下:

2010 年针对 v80 工具集构建的所有 dll 和 exe。所有 dll 的构建于 2005 年,exe 构建于 2010 年,针对 v80 工具集。

值得注意的是,如果我们使用 2010 年构建的 dll(针对 v80)但 2005 年构建的 exe,一切正常。

那么我的问题是:2005 年构建的输出与使用 v80 工具集的 2010 年构建的输出有什么区别?

以上可能取决于是否可以完全匹配构建的命令行参数(即,c++ 和链接器配置),因为我们可能还没有完全正确。如果需要,我可以链接 2005 年和 2010 年的设置。

任何帮助将非常感激。

更新:我最近在 2005 年创建了一个非常简单的应用程序,由 dll 和 exe 组成。dll 有一个函数 static __declspec(dllexport) int add(int a, int b)。exe 是一个简单的控制台应用程序,它从 dll 中调用 add 函数。

然后我将其移植到 VS2010 并将其设置为 v80 工具集。构建它会产生一个与原始大小相同的 dll,但 exe 大 4KB。我正在使用垃圾箱来尝试找出原因,但目前我不太清楚。如果其他人可以在这个简单的情况下确定为什么 exe 的大小不同,这可能有助于解决我的整体问题

4

1 回答 1

1

现在解决了这个问题,这个问题是由于默认情况下打开了 DEP 引起的。我可以向其他任何人确认,如果您使用相同的编译器和链接器设置,构建的输出应该并且将完全匹配。

于 2012-10-15T15:08:22.880 回答