__cdecl
呼び出し規約 (msvc2010) を使用してコンパイルされたプロジェクトがあり、デフォルト設定を使用して同じコンパイラを使用してブーストをコンパイルしました。
プロジェクトはブーストにリンクされていましたが、実行時に次のようなアサート メッセージが表示されました: ファイル: ...\boost\boost\program_options\detail\parsers.hpp 行: 79
実行時チェックの失敗 #0 - ESP の値が関数呼び出しで適切に保存されませんでした。これは通常、ある呼び出し規約で宣言された関数を、別の呼び出し規約で宣言された関数ポインターで呼び出した結果です。
次の質問があります。
- Windows (msvc2010) でデフォルトでビルドをブーストする呼び出し規約
- __cdecl 呼び出し規約でブーストをコンパイルする方法
- なぜブーストは異なる呼び出し規約を持つコードとのリンクを防ぐことができなかったのですか? ブーストには本当にスマートなライブラリ自動インクルージョン コードがあることを理解しました。
更新 #1
ブーストは適切な呼び出し規約でコンパイルおよびリンクしているように見えますが、実行時に上記の問題が発生します。同じコードを使用してサンプル アプリケーションを実行しましたが、動作しますが、私のアプリケーションでは失敗します。唯一の違いは、プロジェクト構成または includes/stdafx.h によるものです。