C++ には、標準化されたバイナリ インターフェイスがありません。コンパイラは、各シンボル名 (つまり、各関数または静的データ) を "マングル" して、名前空間とシグネチャに関する情報を含めます。働ける。各コンパイラは、これを行う方法を自由に決定できます。MSVS コンパイラのバージョンが異なれば名前マングリングの方法も異なるため、一般に、2005 でコンパイルされた C++ ライブラリと 2008 でコンパイルされたライブラリをリンクすることはできません。これには、2005 の実行可能ファイルから 2008 の DLL をロードすることも含まれます (たとえば)。ライブラリ間のインターフェースが C の場合、関連する関数がextern "C"
名前の改ざんを防ぐため。実際には、違いは必ずしもそれほど大きくはありません。たとえば、VS2005 SP1 を使用して 3ds Max 9 用のライブラリをコンパイルする際に問題が発生したことはありません。これには、サービス パックなしで VS2005 が必要であると思われます。
Microsoft はこの非互換性を修正しようとしているので、VS2010 でオプションを導入したため、VS2010 は VS2005 プログラムまたは VS2008 プログラムと互換性のあるバイナリを生成できます (以前のバージョンもあるかもしれませんが、忘れてしまいました)。複数の 3ds Max バージョンで動作するプラグインを作成する必要があり、VS2010 のバグに悩まされていない場合、これはおそらく良いオプションです。また、Intel C++ コンパイラには、選択した MSVS バージョンと互換性のあるバイナリを生成するモードがあります。これは、趣味で使用する場合や、少し高価な値札を買う余裕がある場合に適したオプションです。(彼らは、MSVS が名前マングリングを行う方法をコピーすることによってこれを実現します。)