Microsoft Visual Studio 2015 (v14.0)
私には3つのプロジェクトが含まれています。ランタイムライブラリのランタイムライブラリオプションの変更による影響
これらのプロジェクトのうちの2つはDLLであり、もう1つは実行可能ファイルです。
実行可能ファイルは実行時にDLLを読み込み、関数を呼び出してパラメータを交換します。 WindowのLoadLibrary
、およびGetProcAddress
APIを使用します。
モードでは、私のプロジェクトのRuntime Library
をMulti-threaded DLL
に設定すると、すべて正常に動作します。 Debug
モードの場合はMulti-threaded Debug DLL
です。
私はDebug
ためRelease
またはMulti-threaded Debug
ためMulti-threaded
に変更した場合、私はデバッグアサーションエラーやメモリアクセス違反のエラーやエラーの他の種類を取得を開始。
Multi-threaded
オプションを使用すると、実行可能ファイルにターゲットマシンのC++ランタイムライブラリが必要なくなるため、このオプションを使用する必要があります(この変更は、ソリューションのすべてのプロジェクトで変更されます)。どうすればこの問題を解決できますか?
あなたが書いたものにはいくつかの誤解があります。アドレス空間はプロセスごとであり、DLL *は常にそれらをロードしたプロセスと同じプロセスを使用して同じアドレス空間を共有します。同じプロセス内の他の場所から1つのDLL関数に割り当てられたメモリにアクセスすることは完全に安全です。 '/ MT'は、各DLLが独自のコードを持っているので、'/MT'は一つのDLL内のコードにメモリ( 'new')を割り当ててから別のDLLのコードで解放します静的にリンクされたCRTのコピー。たとえば、[この回答](http://stackoverflow.com/a/8157934)を参照してください。 – dxiv
@dxivあなたのコメントはありがとうございます。私は答えを修正しました。 –