既存の答えはどちらも正しくありません: Windows で次のことを考えると、2 つの DLL があり、それぞれが C/C++ 標準ライブラリの 2 つの異なるバージョンに静的にリンクされています。
この場合、ある DLL 内の C/C++ 標準ライブラリによって作成された構造体へのポインターを別の DLL に渡してはなりません。その理由は、これらの構造が2 つの C/C++ 標準ライブラリの実装間で異なる可能性があるためです。
他にすべきでないことは、new または malloc によって割り当てられたポインターを、別の DLL で割り当てられた DLL から解放することです。ヒープ マネージャーも別の方法で実装される場合があります。
DLL 間でポインターを使用できることに注意してください。ポインターはメモリを指すだけです。問題になるのは無料です。
これでうまくいくかもしれませんが、うまくいくとしたら、それはただの運です。これにより、将来的に問題が発生する可能性があります。
問題の潜在的な解決策の 1 つは、CRTに動的にリンクすることです。たとえば、MSVCRT.DLL に動的にリンクできます。そうすれば、DLL は常に同じ CRT を使用します。
DLL 間で CRT データ構造を渡すことはベスト プラクティスではないことに注意してください。物事をより良く因数分解できるかどうかを確認したい場合があります。
私は Linux/Unix の専門家ではありませんが、これらの OS でも同じ問題が発生することに注意してください。