1

私はc++プロジェクトとc#プロジェクトの組み合わせから作られた大規模なソリューションを持っており、そのほとんどはdllを出力します。これらのプロジェクトからの出力に依存する実行可能ファイルもあります。現在、ソリューション全体がVS2005に組み込まれています。さまざまな理由から、ビルドではv80をターゲットにする必要がありますが、ついに2010IDEに移行する時間が見つかりました。

2010年にビルドすると、ソリューションはすべて正常にコンパイルされますが、アプリの実行時にアクセス違反が発生します。この例外は多くのシナリオで発生しますが、コード内の常に同じポイントで発生します。これは、「ユーザーコールバック中に発生した例外」としても表示されます。例外がスローされるコード行を編集すると、それは単に別の場所に移動します。これは理にかなっています。問題が発生しているシナリオは次のとおりです。

v80ツールセットに対して2010年に構築されたすべてのdllとexe。すべてのdllは2005年にビルドされ、exeは2010年にv80ツールセットに対してビルドされました。

特に、2010年にビルドされたdll(v80に対して)を使用し、2005年にビルドされたexeを使用すると、すべてが正常に機能します。

私の質問は次のとおりです。2005年のビルドからの出力とv80ツールセットを使用した2010年のビルドからの出力の違いは何ですか?

上記はおそらく、ビルドのコマンドライン引数(つまり、c ++とリンカーの構成)を正確に一致させることができるかどうかに依存します。これは、それらが正しくない可能性があるためです。必要に応じて、2005年の設定と2010年の設定をリンクできます。

どんな助けでも大歓迎です。

更新:私は最近、dllとexeで構成される非常に単純なアプリケーションを2005年に作成しました。dllには、関数static __declspec(dllexport)int add(int a、int b)があります。exeは、dllからadd関数を呼び出す単純なコンソールアプリケーションです。

次に、これをVS2010に移植し、v80ツールセットに設定しました。これをビルドすると、元のサイズと同じサイズのdllが生成されますが、exeは4KB大きくなります。私はdumpbinを使用して理由を調べていますが、現時点ではあまりよくわかりません。この単純なケースで、exeのサイズが異なる理由を他の誰かが特定できる場合、これは私の全体的な問題の解決に役立つ可能性があります

4

1 に答える 1

1

これを今すぐ解決しました。この問題は、デフォルトでDEPがオンになっていることが原因で発生していました。同じコンパイラとリンカーの設定を使用した場合、ビルドからの出力は正確に一致するはずであり、一致することを他の人に確認できます。

于 2012-10-15T15:08:22.880 に答える