【发布时间】:2026-02-19 12:35:01
【问题描述】:
我有一个由 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 的大小不同,这可能有助于解决我的整体问题
【问题讨论】:
-
您是否有任何建议的文档将
v80Platform Toolset 添加到 VS 2010? -
嗨,德里克。这里有一个名为 daffodil 的框架:daffodil.codeplex.com 可以为您执行此操作。我们已经用这个和一个定制的道具和目标文件尝试了我们的项目。这些文件位于以下文件夹中:%ProgramFiles%\MSBuild\Microsoft.Cpp\v4.0\Platforms\
\PlatformToolsets 或 %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\Platforms\ \PlatformToolsets 和更完整的信息可以在msdn博客上找到:blogs.msdn.com/b/vcblog/archive/2009/12/08/…
标签: visual-studio-2010 build msbuild access-violation multi-targeting