トップ回答者
Visual Studio のバージョン相違について

質問
-
いつも大変参考になっています。たばひでと申します。
実は、自分に自信がなくて皆さんのご意見をお聞きしたいと思います。
当方で過去にVisualStudio2003, .NetFramework1.1環境でC++で作成したDLLを
ある方にお渡しし、別のプログラムから利用されたいというお話がありました。ただ、.NetFramework1.1はサポートも閉じられVisualStudio2003環境はもうなく、
VisualStudio2010の環境でDLLを作成しお渡し使用としたところ、
先方から『C++ランタイムが必要になるのでVisualStudio2008以前の環境で
コンパイルしてください』と言われてしまいました。もちろん、先方の動作させるOSの環境にあわせ、.NetFrameworkのバージョンを
あわせたり、コンパイルオプションをあわせたりしてコンパイルしようと思って
いたのですが、VisualStudio2008以前の環境じゃないとだめなことってあるのでしょうか?先方が、VisualStudio2008の環境しかないのかも知れないとは思うのですが
このようなことはありますか?すみませんが、ご教授ねがいます。
回答
-
まず、Visual C++にはC++とManaged C++(現在はC++/CLI)の2つがあります。どちらもC++ランタイムは使いますが、後者は.NET Frameworkも使います。質問者さんのDLLは前者・後者どちらでしょうか? 前者であれば.NET Frameworkは無関係になります。
先方が言っている『C++のランタイム』というのがないので困るといわれる件についてはマイクロソフトのサイトからダウンロードすることで解決できると思うのですが、あっているでしょうか?
あってます。ただし、DLLの作りによっては複数バージョンのランタイムを混在させられない場合もあり、ダウンロードすれば無条件に解決するわけではありません。この辺りは先方がどのような意図で発言されたかに依ります。
また、先方が仮にVirualC++の2008のランタイムを使用する環境なので、当方のアプリがそのような環境で動作するようにVisualStudio2012の環境を設定することは可能なのでしょうか?
無理です。Visual Studio 2012を使う限りVisual C++ 2012ランタイムが必要になり、これを他のバージョンに変更することはできません。
気になるのは先方が「VisualStudio2008以前の環境で」とバージョンを特定していない点です。例えばVisual Studio 2005でも構わないと読み取れます。その場合、前段の通りVisual C++ 2005ランタイムが必要になり、であれば先方はどのバージョンでも構わないとなり、ではなぜVisual Studio 2010はダメなのか…私気になりますっ!
- 回答としてマーク 星 睦美 2014年6月30日 0:16
すべての返信
-
佐祐理 さん
お返事ありがとうございます。
やっぱり、自分にこの質問をするための知識が足りていなかったようです。
自分はC++での開発の経験がなく、VB.Netの経験で質問していました。すみません。このような状態の自分がさらに質問していいのか心配なのですがあえてさせていただくと、
先方が言っている『C++のランタイム』というのがないので困るといわれる件については
マイクロソフトのサイトからダウンロードすることで解決できると思うのですが、
あっているでしょうか?また、先方が仮にVirualC++の2008のランタイムを使用する環境なので、当方のアプリが
そのような環境で動作するようにVisualStudio2012の環境を設定することは可能なのでしょうか?前提の知識が足りていなくてすみません。よろしくお願いします。
-
まず、Visual C++にはC++とManaged C++(現在はC++/CLI)の2つがあります。どちらもC++ランタイムは使いますが、後者は.NET Frameworkも使います。質問者さんのDLLは前者・後者どちらでしょうか? 前者であれば.NET Frameworkは無関係になります。
先方が言っている『C++のランタイム』というのがないので困るといわれる件についてはマイクロソフトのサイトからダウンロードすることで解決できると思うのですが、あっているでしょうか?
あってます。ただし、DLLの作りによっては複数バージョンのランタイムを混在させられない場合もあり、ダウンロードすれば無条件に解決するわけではありません。この辺りは先方がどのような意図で発言されたかに依ります。
また、先方が仮にVirualC++の2008のランタイムを使用する環境なので、当方のアプリがそのような環境で動作するようにVisualStudio2012の環境を設定することは可能なのでしょうか?
無理です。Visual Studio 2012を使う限りVisual C++ 2012ランタイムが必要になり、これを他のバージョンに変更することはできません。
気になるのは先方が「VisualStudio2008以前の環境で」とバージョンを特定していない点です。例えばVisual Studio 2005でも構わないと読み取れます。その場合、前段の通りVisual C++ 2005ランタイムが必要になり、であれば先方はどのバージョンでも構わないとなり、ではなぜVisual Studio 2010はダメなのか…私気になりますっ!
- 回答としてマーク 星 睦美 2014年6月30日 0:16
-
佐祐理 さん
お返事ありがとうございます。
>>気になるのは先方が「VisualStudio2008以前の環境で」とバージョンを特定していない点です。例えばVisual Studio 2005でも構わないと読み取れます。その場合、前段の通りVisual C++ 2005ランタイムが必要になり、であれば先方はどのバージョンでも構わないとなり、ではなぜVisual Studio 2010はダメなのか…私気になりますっ!
先方の実際の動作環境に既に 2005と2008のランタイムがセットアップされていて、新たに 2010 のランタイムをセットアップすると、動作環境のその他もろもろの動作確認が必要になるので嫌がられるというのはありえるのでしょうか?
ただ、当方が作成するDLLが必要とするランタイムと先方が開発されるアプリのランタイムはそろえておかなくてもよいのでしょうか?>>まず、Visual C++にはC++とManaged C++(現在はC++/CLI)の2つがあります。どちらもC++ランタイムは使いますが、後者は.NET Frameworkも使います。質問者さんのDLLは前者・後者どちらでしょうか? 前者であれば.NET Frameworkは無関係になります。
前者の C++ でした。あと、先方から『VisualStudio2010でも、スタティックライブラリでMFCをご使用いただければ、問題ありません。』という連絡がありました。うーん。コンパイルのオプションでいけそうなのかなぁ。
- 編集済み たばひで 2014年6月27日 1:41 追記しました
-
あと、先方から『VisualStudio2010でも、スタティックライブラリでMFCをご使用いただければ、問題ありません。』という連絡がありました。うーん。コンパイルのオプションでいけそうなのかなぁ。
バージョンは揃える方が望ましいですが、どうしてもという場合もあるので何とも言えません。スタティックリンクは一長一短ですが、先方がそれで構わないというのであればひとつの手でしょう。ただし、MFCは随時機能追加され巨大になっています。スタティックリンクするとそれらがDLLに組み込まれるため、DLLのファイルサイズがかなり大きくなります(きっと驚くほどに)。
Visual Studio 2013辺りで依存関係を減らしサイズを大きくしない改良が行われましたが、2010にはそれがありません。