【发布时间】:2010-04-24 14:10:24
【问题描述】:
我有一个使用 __cdecl 调用约定 (msvc2010) 编译的项目,我使用默认设置使用相同的编译器编译了 boost。
项目与 boost 相关联,但我在运行时收到如下断言消息: 文件:...\boost\boost\program_options\detail\parsers.hpp 线路:79
运行时检查失败 #0 - ESP 的值未在函数调用中正确保存。这通常是用一个调用约定声明的函数和一个用不同调用约定声明的函数指针调用的结果。
有以下问题:
- 在 Windows (msvc2010) 上默认使用什么调用约定来提升构建
- 如何使用 __cdecl 调用约定编译 boost
- 为什么 boost 不能阻止与具有不同调用约定的代码链接?我知道 boost 具有非常智能的库自动包含代码。
更新 #1
看起来 boost 确实使用正确的调用约定进行编译和链接,但在运行时我仍然遇到上述问题。我使用相同的代码做了一个示例应用程序,它可以工作,但在我的应用程序中它失败了。唯一的区别可能来自项目配置或包含/stdafx.h
【问题讨论】:
标签: visual-studio-2010 boost calling-convention stdcall cdecl