A と B という 2 つの dll があります。どちらも静的にリンクされている異なるバージョンのライブラリ C を使用しています。これらの dll を実行可能ファイルにロードし、その機能を使用すると、プログラムがクラッシュします。
誰かがこれの背後にある理由とそれを修正する方法を説明できますか? この問題は XP でのみ発生する可能性があり、Windows 7 では正常に動作します (どういうわけか)。
C DLL の異なるバージョンには、互いに競合する異なる型定義があるため、プログラムがクラッシュします。あるバージョンには存在せず、別のバージョンには存在する特定のフィールドがある場合、DLL のタイプに応じて、2 つの異なるシナリオが発生します。Managed はバインドに失敗し、それを通知します。管理されていないとメモリが破損し、予期せず他の場所で厄介なエラーが発生します。
OS 間で異なる動作が見られるのは、おそらく XP が 7 とは異なる方法でメモリ管理を行うためです (管理されていない DLL であると私には思われます) が、それを判断するのは困難です。