DLL を操作する際の一般的な問題は、DLL でメモリを割り当て、別の場所 (別の DLL またはメインの実行可能ファイル) でメモリの割り当てを解除することです。あなたの問題はそのようなものから来るかもしれないと思います。
簡単な解決策の 1 つは、使用している/MD
すべてのプロジェクトに対してコンパイラ フラグを使用することです。このオプションは、DLL 間で同じアロケーター/デアロケーターが使用されるように、ランタイム ライブラリを実行可能ファイルに動的にリンクする必要があることを指定します。詳細については、こちらをご覧ください。
また、次の点に注意してください。
ランタイム ライブラリの静的バージョンと動的バージョンを混在させないでください。1 つのプロセスに複数のランタイム ライブラリのコピーがあると、問題が発生する可能性があります。これは、1 つのコピーの静的データが他のコピーと共有されないためです。リンカーを使用すると、1 つの .exe ファイル内で静的バージョンと動的バージョンの両方をリンクできなくなりますが、ランタイム ライブラリの 2 つ (またはそれ以上) のコピーが残る可能性があります。たとえば、ランタイム ライブラリの静的 (非 DLL) バージョンにリンクされたダイナミック リンク ライブラリは、動的 (DLL) バージョンのランタイム ライブラリにリンクされた .exe ファイルと一緒に使用すると、問題を引き起こす可能性があります。 . (また、1 つのプロセスでライブラリのデバッグ バージョンと非デバッグ バージョンを混在させることも避ける必要があります。)
もう 1 つの方法は、ある dll でメモリを割り当てず、別の dll で割り当てを解除することです。したがって、コードを確認して、最終的に書き直すことができます。しかし、これはより時間がかかります。