• 締切済み

VC++のバージョンの違いによる影響について

いつもお世話になります。 10年ほど昔に作成したプログラム(VC++6.0でビルド)を分解して、例えばライブラリとしてVC++2005とかの新しいバージョンで作り変えようとした時に、考えられる問題点などありますでしょうか? ビルド自体ができない可能性があったり、ビルドができても実行時になんらかの理由でエラーが起こったりするでしょうか。 また、MFCを使っている場合は、バージョンが違うとうまくうごかないものでしょうか? VC++自体もほとんど使ったことがなく、想像もできません。

  • aneja
  • お礼率93% (379/405)

みんなの回答

  • takoashi
  • ベストアンサー率39% (21/53)
回答No.2

std::auto_ptrの動作が違う

aneja
質問者

お礼

ご回答ありがとうございました。標準ライブラリでも動作が異なるのですね。参考になりました。

  • norachlo
  • ベストアンサー率100% (10/10)
回答No.1

プロジェクトファイル自体は、VC のコンバータが自動的に変換してくれるので そのままでもビルドを試みることはできますが、大抵は何らかの問題が起きると思います。 ざっと思いつく限りでは以下のような点が異なります。 ・for 文の中で宣言された変数のスコープが異なる。   VC6 では for ブロックの外で宣言されたことになる。   VC2005 では for ブロックの中で宣言されたことになり、     外では利用できない(ただし設定で変更できる)。 ・多くの C標準関数について、アンセーフであるとの警告が出る。   マクロ定義で(ある程度?)出ないようにもできる。 ・wchar_t の扱いが変わる(これもたぶん設定で変更可能)。   unsigned short から組み込み型へ。   なので一部、明示的なキャストが必要だったり、挙動が異なっていたりする。 ・一部無くなったヘッダがある。   iostream.h, fstream.h など。 ・演算子の優先順位について明示する必要がある(警告)。   flag & 0x40 != 1   このような書き方を以下のように改めなくてはならない。   (flag & 0x40) != 1 また、私自身はあまり把握していませんが、ご指摘の通り MFC のバージョン間の相違もあり、 リンクするファイル(mfc*.lib など)が異なるだけではなく、 仕様の違いからエラーが生じることもあるようです。 ただ、上記の大半はさほどの手間もなく対処可能なので、 とりあえず現状のままでコンパイルにパスしそうかどうかを確認してみるのも手だとは思います。

aneja
質問者

お礼

早速のご回答、ありがとうございました。細かい点まで異なるのですね。とりあえずはアドバイスいただいたように、ビルド確認しながら直していこうと思います。ありがとうございました。

関連するQ&A

  • VC6.0++でDXライブラリが上手くいかない!

    Windows10で家に昔買った VC6.0++があったのでインストールして DXライブラリのプログラムコードを入力して 実行してみたのですが、 VC6.0++上のビルドでは画像を表示するプログラムなら画像が表示されるし 音を鳴らすプログラムなら音がなるんですが、 作成したexeファイルを実行した場合、プログラムが実行されません なぜでしょうか? 何が悪いのでしょうか? 教えてくださいよろしくお願いします。

  • VC++6.0からVC++.NET2005へ移植

    VC++6.0で作成したプログラムをVC++.NET2005に移植しました。 ビルドを行うと『fatal error LNK1104:ファイル'mfc42.lib'を開くことができません。』のエラーが出てしまいます。 ソリューションのプロパティを見てもどこで「mfc42.lib」の参照を定義しているのか分かりません。 どこで「mfc42.lib」の参照を定義しているのか教えてください。また、対策を教えてください。

  • VCの使い方

    tororinnと申します。 現在、C言語の勉強をしております。 以前まではボーランド社の無償コンパイラを利用していたのですが、最近、VCを利用しております。 さて、質問ですが、 簡単に申しますとVCの使い方がわかりません。 以前、学校でVCを使っていたのですが、やり方をすっかり忘れてしまいました。 要は、ボーランドでやっていた時のように、 シンプルにコンパイラ(ビルド)をおこなった際に、 プロンプトに実行結果が出力されるのが、ベストです。 いろいろサイトを見て回って、 [新規作成]-「プロジェクト」-「win32 Application」 を選択して、 簡単な"hello"などを出力するだけのプログラムを試しに作ったのですが、 ビルドではエラーがないのに対し、 実行すると、「プログラムを実行できません」というメッセージが出てきます。 なにとぞ、よろしくお願い申し上げます。

  • VC2005 ビルドオプションについて

    VC2005で質問です。 [やりたいこと] VC2005でビルドを行い、意図したライブラリができるとします。 そのライブラリファイルを、予め準備していたExeファイルへ 入力/実行を自動的にする方法(設定)とかってあるのでしょうか? この時、作業はVC2005でビルドするだけです。 すみません、分かりにくいですね。 もう少し詳しく。。 [作業] 1. VC2005でビルドを実行 (1)Lib fileが作成される (2)予め準備していたexeファイル (3)予め準備していたexeファイルが出力したファイル 通常はビルドするだけだと、Libファイルが出来て((1)で)終了です。 今回やりたいのは、そのLibファイルを自動的に予め準備していた exeファイルへ入力/実行し、そのexeファイルから出力されたファイル を自動的に作成したいというものです。 言ってる事同じですね^^; ご存知の方がいらっしゃいましたら、ご教授ください。

  • VC++ 2010のエラーについて

    現在VC++ 2010を使ってソフトを作成しています。 BOOSTライブラリを用いているのですが、 ビルドを行おうとすると、 >LINK : fatal error LNK1104: ファイル 'libboost_thread-vc100-mt-sgd-1_43.lib' を開くことができません。 といったエラーが出てしまいます。 ちなみにboostはバージョン1_43を使用しています。 また、bjamを行い、boostはしっかりとビルドされております。 さらに、libboost_thread-vc100-mt-sgd-1_43.libが存在することは確認しており、 そのフォルダまでのパスもしっかり通しました。 どなたかご存知の方いらっしゃいましたら教えていただけると幸いです。

  • VC++2010の「#include <」

    VC++ で、他人の作ったソースコードをビルドして実行してみています。 (WinPcapのデベロッパ向けのライブラリを使った、サンプルプログラムです。) VC++自体、あまり理解が深くないのですが、 「#include <」まで書くと、「ヘッダファイル名が表示される」プロジェクトと、「そうではない」プロジェクトがあります。 「そうではない」方のプロジェクトだと、ビルド時にincludeするライブラリが足りないとか、そんな感じのエラーが表示されます。 ぱっと見の違いは、「ヘッダファイル名が表示される」プロジェクトの場合は、 ソリューションエクスプローラに、「外部依存関係」というフォルダのショートカットがあり、ライブラリがどっさりあります。 「そうではない」プロジェクトについても、「#include <」で、ヘッダファイルを表示してくれるようにしたいのですが、どの様にすればよいのでしょうか?★ プロジェクトのプロパティの、 C++>プリプロセッサ>プリプロセッサの定義 リンカー>入力>追加の依存ファイル はどちらのソースも同じにしたのですが…。

  • VC++6.0へバージョンアップしたら5.0で作ったアプリがエラーになる

    VC++を5.0から6.0にバージョンアップしたのですが。 これで5.0で作ったプロジェクトをビルドしなおしたら、 実行時にアプリケーションエラーになってしまいました。 不正な処理-->ページ違反ですというやつです。 コンパイル時はエラーは何も出ないし、さらにデバックビルド だとちゃんと動き、リリースの時だけこの現象が起きてしまうので、 解析が困難で困っています。 こういった現象に何か心当たりがある方アドバイスをお願いいたします。

  • VC++もしくはMFCからEXCELをコントロールする方法

    今MFCのアプリケーションからExcelのセルにデータを入れたりするなどを行いと思います。 ネットで調べると、importやタイプライブラリによるクラス追加の方法があるのはわかりました。 ただExcelも複数のバージョンがあり、一つのプログラムでそれらを使い分ける方法はありますでしょうか? たとえば実行時にExcelのバージョンを指定してから実行するとか、そういった使い方が行えればと思っています。 あとタイプライブラリでクラスを追加した場合、そのプロジェクトをExcelのインストールされていないPCでビルドしたりできるのでしょうか?

  • 「MFCを使用しない」から「MFCのスタティックライブラリを使用」

    VC++初心者ですが、 Win32Applicationで「MFCを使用しない」で作成したプログラムが正常動作しました。 そこで 「MFCを使用しない」から「MFCのスタティックライブラリを使用」にしてビルドしたところ、リンク中に どんどんエラーがでます。 関数関係のエラーなのですが。 (1) どうすればエラーを無くせるのでしょうか (2) 「MFCのスタティックライブラリを使用」にするとどの様なメリットがあるのか(説明している参考URLなど)。 教えて下さい

  • VC++でlib作成

    VC++初心者です。変な質問かもしれません。 VC++でライブラリー(~.lib)の作成は出来るのでしょうか。以下は可能である場合の質問です。 1)プログラミング自体に特殊な事、あるいは決め事はあるのでしょうか?普通のexeを作成する時と同様で何も意識する事は無いのでしょうか? 2)作成自体はexeを作る時の様にビルドにより行うのでしょうか?操作が知りたいです。 3)何らかの共通処理をdllとして作成するのと、libとして作成するのでは何か違いがあるのでしょうか。単純に考えると、実行時に動的にリンクするdllの方がレスポンス面で劣り、スタティックにリンクするlibの方がアプリケーションモジュール(共通処理を呼ぶ側)が大きくなる様な気がします。設計する時にどうやって切り分けを行っていますか? (スタティックにリンクするのがlibと書いてしまいましたが、これ自体も良くわかっていません。) 以上、よろしくお願いします。

専門家に質問してみよう