Syndication
Search


クリエイティブ・コモンズ・ライセンス

Movable Type 2.661
Amazon Search

VC5 と VC6 の共存

古い製品の話ですが、メモ。

VC5とVC6を一緒にインストールすると、MFCベースで作ったプログラムのデバック実行が出来ない。Debug版MFC共有DLLのバージョン違いが原因のようで、VC6のほうが新しくなっています。

以下がそのファイル
MFC42D.DLL
MFC42D.PDB
MFCD42D.DLL
MFCD42D.PDB
MFCN42D.DLL
MFCN42D.PDB
MFCO42D.DLL
MFCO42D.PDB

で、VC5インストール時のこれらのファイルと、VC6インストール時のファイルを、各々あらかじめ保存しておいて、各VCを使用するときにSYSTEM32ディレクトリにコピーすればOK。
ちょっと面倒だけど、ほとんどMFC使わないので、これでいいかな。

Similarity Search
Trackback
このエントリにTrackBackするには、以下のURLにTrackBack pingを送ってください。
※:スパム対策しています。予想外のエラーが発生した場合は、コメント欄でご報告いただけると嬉しいです。

Trackback URL is >>
Comments

これらのDLLを入れ替えるだけで、コンパイラはVC6だけでもいいのでしょうか。VC6+VC5のDLLでVC5のプロジェクトを正しくビルドできるのでしょうか。(DSPファイルは更新されますが)

Posted by bigmak at 03.28(Tue) PM 01:34

コメントありがとうございます。
今、手元に再現できる環境が無いので確実ではないですが、VC6+VC5のDLLな環境でデバックすると落ちたかと記憶してます。逆(VC5+VC6のDLL)の環境でも同様です。
ここで問題になるのはデバック動作だけですので、単にコンパイルする(VC5のプロジェクトをVC6でビルドしたい)だけなら、VC5の環境は必要ないかと思いますよ。書き込みの通りDSPファイルが更新されるので、戻ることは出来なくなると思いますが・・・。
もし、VC5のプロジェクトがVC6で正しくコンパイルor動作しないということでしたら、それはここでの解決法では無く、VCの設定かソースコードに問題があるのかもしれませんね。

すみません、役に立たないコメントです。

Posted by coo at 03.28(Tue) PM 11:21

cooさん、コメントありがとうございます。
説明不足でしたが、”VC5のDLL”というのは、VC5のすべてのDLLではなく、最初の投稿に書かれている8個のDLLのことです。VC6+VC5のDLLでビルドできるが、できたEXEファイルをVC6のデバッガではデバッグできない(実行できない)ということでしょうか。また、デバッグできたとしても実際の実行環境(VC5のDLL)ではエラーになるということでしょうか。
説明が前後しますが背景を説明すると、現在、Windows2000上にVC5とVC6の開発環境をもっており、デュアルブートにしてそれぞれのプロジェクトをメンテナンスしています。今回、開発用PCがWindowsXPに変わるため、環境の移行に悩んでいます。デュアルブートにしてもいいのですが、プリロードのXPなので2番目のパーティションにセットアップできません。セカンドHDDにしてブートするというテもあるのですが、ドライブ番号が変わってしまうために、ショートカットアイコンが機能しなくなります(使い勝手が悪くなる)。また、イントラネットに接続しているとホスト側から不定期にセキュリティチェックが行なわれるので、デュアルブートも考え物です(セキュリティパッチを両方に適用して同じレベルに保たなければならない)。
そこでDLLだけ交換して共用(併存)できるのであれば、一番楽かなぁ、と思ったわけです。

Posted by bigmak at 03.29(Wed) PM 02:02

追記)
VC5からVC6に変更すると、初めて開くときに「残しますか」(英語だったかもしれない)ときいてくるので「はい」を選ぶとDSPファイルの拡張子を001として残してくれます。VC5に戻すときは、その拡張子をDSPに変更してやれば戻れます。

Posted by bigmak at 03.29(Wed) PM 02:14

bigmakさん、コメントありがとうございます。
bigmakさんの書き込みにあるように、私も一つのOS上にVC5とVC6の環境を共存させて(さらに言えば.NETも共存してます)作業しています。
私の場合ですのでもちろん保証はありませんが、以下のような手順でVC5とVC6を共存させています。
1.OSのインストール
2.VC5のインストール&最新SPへの更新
3.SYSTEM32ディレクトリの8つのDLLを、別フォルダ(例:VC5DLLなど)に保存
4.VC6のインストール&最新SPへの更新
5.SYSTEM32ディレクトリの8つのDLLを、別フォルダ(例:VC6DLLなど)に保存
6.VC5で作業するときには、VC5DLLに保存しているDLLをSYSTEM32にコピーしてから起動
7.VC6で作業するときには、VC6DLLに保存しているDLLをSYSTEM32にコピーしてから起動
つまり、各VCを起動する前に、それに対応する保存済みDLLをコピーしてから起動させる事で共存させています。
※:実際にはコピー忘れを防ぐために6と7を行うプログラムを作ってそれを起動しています。

もし、"VC6+VC5のDLL"な環境だけで全てがまかなえるか?という事でしたら、それはNGかと思います。実際に私の環境ではデバッカ動作させたら落ちていたと記憶しています。競合するのはデバック版DLLだけですので、リリースビルドでしたら問題無いかもしれませんが、個人的にはスッキリしないのでお勧めはできません(^^;

以上、お役に立てればよいのですが。

Posted by coo at 03.29(Wed) PM 02:48

bigmakさん追記ありがとうございます。
たしかにおっしゃるとおり、バックアップが残りましたね。忘れていました。

Posted by coo at 03.29(Wed) PM 02:59

cooさん、早速の返答をありがとうございます。
最後に確認させてください。
1.DLLを交換後の”起動”はVC5あるいはVC6の起動のことですか、それともOSの再起動ですか?
2.VC5とVC6は、異なるフォルダー名にインストールする必要がありますよね?つまり、インストール時に「インストール先のフォルダー名」をデフォルトから変更する必要がありますよね?

>※:実際にはコピー忘れを防ぐために6と7を行うプログラムを作ってそれを起動しています
私もこういう方法を考えていました。

いろいろと役にたちます。ありがとうございます。

Posted by bigmak at 03.29(Wed) PM 04:02

VC5とVC6のインストール先フォルダー名はデフォルトですでに異なっていました。名前を変更する必要はありませんでした。
週末にでもDLL交換後の起動とビルド、実行を確認します。

Posted by bigmak at 03.29(Wed) PM 11:14

bigmakさん返答が遅れました。
1.については"VC5またはVC6"起動の事です。OSの再起動は必要有りません。言葉足らずで混同させてしまいました。
2.はbigmakさんの追記でもありますが、VC5とVC6は別フォルダで運用したほうが良いかと思います。

以上、お役にたてば嬉しいです。

Posted by coo at 03.30(Thu) AM 12:36

cooさん、ありがとうございます。
前コメントで最後になるつもりでしたが、新たな疑問が湧いてきたのでお聞きします。わかれば教えてください。デバッグ用DLLとインストールパスのことはわかりましたが、ビルド時のインクルードパスとライブラリーパスはどうなるのでしょうか?絶対パスで指定されていると、早く見つかったほうが適用されてしまい、VC6なのに使用したのは(知らないうちに)VC5のヘッダーファイルとライブラリーということにはなりませんか?

Posted by bigmak at 03.30(Thu) AM 11:04

bigmakさんコメントありがとうございます。
たしかにおっしゃるとおり、インクルードパスやライブラリパスなどの環境変数は、各々のバージョンに合わせるべきだと思います。ただこれは、手動でコマンドライン等からビルドする場合に注意すべき事で、IDE上ではデフォルトで各々の(VC5ならVC5の、VC6ならVC6の)インクルードやライブラリのみのパスが指定されていると思いますがいかがでしょうか?もしそうなっていない(例えばVC6の[オプション]->[ディレクトリ]にVC5のパスが含まれているなど)ようでしたら手動で修正すべきだと思います。
例えば、VC5を起動したことによって、VC6の環境変数が(知らないうちに)変更されてしまうことがあるのか?ということを心配されているようでしたら、それはIDEだけを使用している限りは大丈夫だと思います。
つまりIDEだけを使用するのならそれほど問題にならないのですが、コマンドライン上でのビルドが必須で、VCVARS32.BAT等を使って環境変数を変更しなければいけないのでしたら、bigmakさんのご推察通りの不具合が発生する可能性は高いです。そのような場合はバッチの書き方にも工夫が必要です。
以上、お役にたてば幸いです。

Posted by coo at 03.30(Thu) PM 02:26
Post a comment
このエントリに対してコメントを追加するには、以下フォームに記入して [追加]ボタンを押下してください。
  • 必須な項目は"コメント"のみです
  • 名前等は匿名でかまいません
  • E-Mail/URLを記入した場合は公開されます
  • HTMLタグは使用できません(実体参照に変換されます)
  • コメント内のURLは自動的にリンクが張られます
  • スパム対策のため、ひらがなの含まないコメントを書くことは出来ません
  • HTTP Cookieを利用して、名前やE-Mail/URLの情報を記録させることが出来ます
名前/E-Mail/URLを記録しますか?