質問: ### 前提・実現したいこと DLLを使用するプログラムをデバッグモードで実行する際エラーが発生しないようにしたい。 DLLはVisualStudio2015でMFC DLLとして作成したもので、Releaseしたものを使用しています。 よろしくお願いいたします。 ### 発生している問題・エラーメッセージ ``` ハンドルされない例外が 0x6E1CD930 (vcruntime140.dll) で発生しました(DataRay.exe 内): 0xC0000005: 場所 0x001F1000 の読み取り中にアクセス違反が発生しました。 この例外のハンドラーがある場合は、プログラムを安全に続行できます。 ``` というエラーメッセージが発生し、デバッガは自作DLLの関数を呼び出す行を指して止まります。 ### 試したこと 自作DLLのプロジェクトを、使用する側のプロジェクトのソリューションに追加し参照に追加することでエラーが発生しなくなります。 また、一回エラーが発生しなくなればそれ以降ソリューションから自作DLLのプロジェクトをアンロードしようと参照を削除しようとエラーは発生しません。 複数のソリューションで同じことをするので「うっかり自作DLLのコードを書き換えてしまった!」ということを避けたいのと単純に面倒で不気味なのでこの方法は避けたいと考えています。 ### 補足情報(FW/ツールのバージョンなど) * Windows7/64bit SP * VisualStudio2015 SP1 * C++/MFC ### 2018-08-27追記 DLLを同環境においてDebugモードでビルドした.dll, .lib, .hファイルをDLLを使用するプログラムに配置すると少し状況が変わりました。 リンカエラーが発生しソリューションファイルと同じディレクトリにあるDebugディレクトリ下に.libファイルを要求されます。 配置後は結局同じエラーが発生します。 またリンカにはlibというディレクトリ下の.libファイルを指定しているはずなのですがDebugディレクトリ直下に配置して上記のリンカエラーが解消されるのも不可解に思えます・・。 ### 2018-08-28追記 今朝デバッグしているとDLLのバージョンが違うとVisualStudioに怒られ、 何も変えてないのになあと思いながらDLLをビルドしなおして配置しなおすなどなどしたら発生しなくなりました・・・。 DLLのプログラムも手直しも何もしてないのに変な話です。妖精さんが直しておいてくれたのかもしれません。(冗談抜きで最近変更など全く加えていないので何が変わったのか謎です・・・) ともあれ教えていただいた方法で動くことが確認できたのでベストアンサーに選択しました。
回答: 外しているかもしれませんが、MFC DLLというのでちょっと気になった点を指摘させていただきます。 DLL側はReleaseビルドで、exe側はDebugビルドで実行されているとしたら、例えばCStringなどのデータをDLLとexe間でやり取りする際にエラーになったと思います。 詳しい内容はちょっと記憶が怪しいのですが、exe側で呼び出すデバッグモードのMFCのライブラリがそのままDLL側でも使用されるため、リリースビルドされたDLL側のMFCクラスをexe側で使用しようとしたときにメモリマッピングが違うなどの理由で例外となっていたと記憶しています。 解決策としては、同一プロジェクト内に置かないとしても、exeデバッグ時はデバッグビルドしたDLLを使用するということになります。 これで一度試してみてください。