C++には標準化されたバイナリインターフェイスがありません。コンパイラは、名前空間、引数オーバーロード、&cのように、各シンボル名(各関数または静的データ)をネームスペースとシグネチャに関する情報を含むように「mangles」します。働ける。各コンパイラは、これを行う方法を自由に決めることができます。異なるMSVSコンパイラのバージョンは異なる方法で名前を変えます。したがって、2005年にコンパイルされたC++ライブラリと2008年にコンパイルされたライブラリをリンクすることはできません。関連する関数にextern "C"
とマークされていれば、ライブラリ間のインターフェイスがCであれば、名前マングリングを防ぐことができます。 VS2005 SP1を使用して3ds Max 9用のライブラリをコンパイルすることは、サービスパックのないVS2005を必要としていたことはありませんでした。
Microsoftはこの非互換性を修正しようとしているため、VS2010ではオプションを導入しているため、VS2005プログラムまたはVS2008プログラムと互換性のあるバイナリを作成できます。複数の3ds Maxバージョンで動作するようにプラグインを作成しなければならない場合、VS2010のバグに惑わされることはありませんが、これはおそらく良い選択です。また、インテル®C++コンパイラーは、選択したMSVSバージョンと互換性のあるバイナリーを生成するモードを備えています。これは、趣味で使用する場合や、少し高価な価格タグを使用できる場合には、より良いオプションです。 (彼らは、MSVSがmanglingという名前をつける方法をコピーすることによってこれを達成します。)
3ds Maxのカスタマーサービスでお尋ねください。 –
カスタマーサービスはどういう意味ですか?オートデスクのWebサイトのSDKディスカッションフォーラムには、私の質問に対処するスレッドがありますが、それは非常に良い答えではありません。 VS2010は正常に機能しているとのポスターがいくつか出ていますが、オートデスクの従業員からは「VS 2011は最大2011年のプラグインではサポートされていません。私はこれが "あなたの責任で使用する"ことを意味すると思います。 –