我有一个由c ++和c#项目组合而成的大型解决方案,其中大部分输出dll。我们还有一个可执行文件,它取决于这些项目的输出。我们的整个解决方案目前都在VS2005中构建。出于多种原因,我们必须针对我们的构建定位v80,但我们终于抽出时间转向2010 IDE。
当我们在2010年构建时,我们的解决方案都可以很好地编译,但是在运行应用程序时我们会遇到访问冲突。此异常在许多情况下发生,但始终位于代码中的同一点 - 它还显示为“在用户回调期间遇到的异常”。如果我们编辑出异常抛出的代码行,它只会移动到其他地方,这是有道理的。我们遇到问题的情景如下:
2010年针对v80工具集构建的所有dll和exe。 所有dll都是在2005年构建的,exe是在2010年针对v80工具集构建的。
值得注意的是,如果我们使用2010年制造的dll(针对v80)但是2005年制作的exe,一切正常。
我的问题是:使用v80工具集,2005年构建的输出与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。我正在使用dumpbin试图找出原因,但我现在不太了解它。如果其他人能够在这个简单的情况下识别为什么exe的大小不同,这可能有助于解决我的整体问题
答案 0 :(得分:1)
现在解决了这个问题,这个问题是由DEP默认打开引起的。我可以确认其他人,但是如果使用相同的编译器和链接器设置,那么构建的输出应该并且将完全匹配。