私は自分の仕事で次の問題に直面しました: MFC .dll と MFC .exe の 2 つのプロジェクトが同じソース コード (もちろんエントリ ポイントを除く) に基づいているため、同じデータを処理すると、それらによって異なる結果が生成されることがわかります。両方のすべてのプロジェクト設定を確認したところ、すべてのプロジェクト プロパティが類似していることがわかりました (少なくとも重要だと思われるものは)。いくつかのテストを実行した後、次のことを学びました。
- MFC .exe は、「デバッグ」モードと「リリース」モードの両方で同じデータセットに対して同じ結果を生成します
- MFC .dll は、「デバッグ」モードと「リリース」モードで同じデータセットに対して異なる結果を生成します
- .dll の「リリース」結果は、.dll の「デバッグ」結果とも、.exe の「デバッグ」または「リリース」結果とも一致しません。
.exe は、両方のコンパイラ構成で同じ結果が得られるという理由だけで正しく動作すると思いますが、これを確認することはできません。では、この .dll 'Release' 構成の問題はどのように解決できるのでしょうか? つまり、どうすればそれを他のものと一致させることができますか? そのような行動を説明するものは何ですか?
編集
Delphi で書かれたホスト アプリケーションを使用しているため、問題が発生していると思われます。この提案をテストするために新しい C++ exe を作成したところ、間違いなく正常に動作することがわかりました。唯一の違いは、Delphi アプリケーションで使用する DLL を作成するときにextern "C"とマークしましたが、C++ アプリケーションの場合はexternだけを記述したことです。このトピックに関する別の議論の詳細については、こちらを参照してください。しかし、 "C"を使用せずにexternマークのみで DLL を使用しようとすると、Delphi アプリケーションで、関数のエントリ ポイントがそこに見つからないと報告されます。