2011-01-19 10 views
2

3ds Max SDKの状態では、3ds Max 2011のプラグインをVisual C++ 9.0(Visual Studio 2008)でビルドする必要があります。特定のバージョンのVisual C++で3ds Maxプラグインをビルドする必要があるのはなぜですか?

異なるバージョンのVisual C++を使用してDLLを作成すると、バイナリは同一ではありませんか?これは単に適切なコンパイラ設定を選択することの問題ですか?

Visual C++ 2010(Visual Studio 2010)を使用してプラグインをビルドしようとすると、どのような問題が発生しますか?

+0

3ds Maxのカスタマーサービスでお尋ねください。 –

+0

カスタマーサービスはどういう意味ですか?オートデスクのWebサイトのSDKディスカッションフォーラムには、私の質問に対処するスレッドがありますが、それは非常に良い答えではありません。 VS2010は正常に機能しているとのポスターがいくつか出ていますが、オートデスクの従業員からは「VS 2011は最大2011年のプラグインではサポートされていません。私はこれが "あなたの責任で使用する"ことを意味すると思います。 –

答えて

1

特に3ds Maxについてはわかりませんが、通常の理由はCランタイムライブラリです。ホストアプリケーションがCRTのDLLバージョンを使用する場合、プラグインも同じバージョンを使用する必要があります。

プラグインがmalloc()を使用してメモリを作成し、それを使用するホストアプリケーションに渡した後、free()を呼び出した場合を想像してください。あなたのプラグインとホストアプリケーションが異なるCRTを使用している場合、free()へのホストの呼び出しは、メモリのブロックであるホストのCRTではないため、失敗またはクラッシュします。

+0

メモリ管理は、3ds Max SDKがプラグインが独自のメモリを管理することを指定している点を除いて、妥当な説明のようです。 –

+0

3ds Max SDK>プラグインの作成>プラグインの基本>プラグインインスタンスの作成と破棄を参照すると、プラグインにはCreateメソッドを持つ静的クラスインスタンスと、DeleteThisメソッドを持つ別のクラスがあります。 –

0

バイナリは同一ではありませんが、バイナリインターフェイスが必要です。これは必要なものです。

VS2010を使用できない理由は、まだ生産品質ではないためです。彼らはVS2010 SP1を最低限待つべきだと思っています。

あなたは彼らがちょうど頑強で頑固であると思いますか?すべてのあなたの楽しみを台無しにする。彼らには理由がある。良いもの。そのため、このようなバグの

https://connect.microsoft.com/VisualStudio/feedback/details/565959

0

私は、プラグイン開発のための両方のVisual Studio 2008と2010を使用しています。 私が見てきた違いは、ユーザーがvs C++ランタイムバージョンを2010 \ 2008に必要とすることだけです。

しかし、落とし穴があるかもしれませんが、私はまだ問題は発生していません。

0

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という名前をつける方法をコピーすることによってこれを達成します。)

関連する問題