none
Visual Studio6.0 から Visual Studio2010用に、コード変換するには? RRS feed

  • 質問

  • 古いソースコードを流用したいと思いますが、Visual Studio2010ではビルドをするとエラーの嵐。

    何とか、なりませんか?

    フリーのコード変換ソフトとかあったら、教えていただきたいと思います。

     

     

    よろしくお願いします。

    2010年9月10日 0:37

回答

  • Visual Studio .NET 2002、Visual Studio .NET 2003、Visual Studio 2005、Visual Studio 2008、Visual Studio 2010の各々の変更点を調べるしかありません。8年以上放置したんですから、そうそう簡単には済みません。

    ただし、1ヶ所エラーになるとその関数などが未定義として扱われたりで、他のエラーを引き起こします。エラーを先頭から順に対処していくと、エラーの数は案外少ないかも知れません。

    • 回答としてマーク taokato 2010年9月10日 7:33
    2010年9月10日 2:34
  • .NET と VS6.0 とでは、標準C関数を許さなかったりします。

    例えば、「srtcpy」は駄目で、「strcpy_s」にして引数の数も変えて、やっと、一つのエラーを片付ける感じです。


    そういうやつであれば、とりあえず逃げておくという手もあります。(とりあえず、です)

     セキュリティ保護されたテンプレート オーバーロード
     http://msdn.microsoft.com/ja-jp/library/ms175759.aspx
    • 回答としてマーク taokato 2010年9月10日 8:14
    2010年9月10日 7:47

すべての返信

  • 開発ツールや言語のバージョンは上がっても C++ は C++ なのですから、それが原因で大量のエラーが出るとは思えません。
    エラーの多くは環境やら設定やらに原因があるのではないでしょうか。

    参考:
     Visual Studio 2010 C++ Project Upgrade Guide - Visual C++ Team Blog - Site Home - MSDN Blogs
     http://blogs.msdn.com/b/vcblog/archive/2010/03/02/visual-studio-2010-c-project-upgrade-guide.aspx
    2010年9月10日 1:03
  • これといったものは見つかりません。
    自分で修正する気があるのなら、具体的なエラーメッセージを
    アップしてみてはどうでしょう。

    2010年9月10日 1:22
  • VC6からだと、エラーではなくCRTセキュリティ強化の「警告」もたくさんでてそうですが

    分けて考えていますでしょうか?

    2010年9月10日 1:33
  • Visual Studio .NET 2002、Visual Studio .NET 2003、Visual Studio 2005、Visual Studio 2008、Visual Studio 2010の各々の変更点を調べるしかありません。8年以上放置したんですから、そうそう簡単には済みません。

    ただし、1ヶ所エラーになるとその関数などが未定義として扱われたりで、他のエラーを引き起こします。エラーを先頭から順に対処していくと、エラーの数は案外少ないかも知れません。

    • 回答としてマーク taokato 2010年9月10日 7:33
    2010年9月10日 2:34
  • 時間は掛かりそうですが、一つずつ潰して行くしかなさそうですね。

     

    >8年以上放置したんですから、そうそう簡単には済みません。

    いやいや、エラーを回避させるのが手間なので、未だにVS6.0を使っているようで・・・。 (他部署ですけれども)

     

    .NET と VS6.0 とでは、標準C関数を許さなかったりします。

    例えば、「srtcpy」は駄目で、「strcpy_s」にして引数の数も変えて、やっと、一つのエラーを片付ける感じです。

    こういったものが、あちらこちらに散らばっています。

     

    2010年9月10日 7:33
  • .NET と VS6.0 とでは、標準C関数を許さなかったりします。

    例えば、「srtcpy」は駄目で、「strcpy_s」にして引数の数も変えて、やっと、一つのエラーを片付ける感じです。


    そういうやつであれば、とりあえず逃げておくという手もあります。(とりあえず、です)

     セキュリティ保護されたテンプレート オーバーロード
     http://msdn.microsoft.com/ja-jp/library/ms175759.aspx
    • 回答としてマーク taokato 2010年9月10日 8:14
    2010年9月10日 7:47
  • ここにぶら下げます。yominetさんの指摘が当たっていたということですね。それから「エラーを回避させるのが手間なので、未だにVS6.0を使っている」を指して根本的な対応をしていない、「放置した」と表現しました。
    totojoさんの挙げたページですが、まぁ書いてあることと同じことですが簡単にまとめますと

    #define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1
    こうするとstrcpy_s()に対してバッファサイズ引数を書き足さなくてもいいオーバーロードが定義されます。VC++コンパイラがバッファサイズを推測可能な状況であれば、 _s を書き足すだけで対処できます。

    #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
    こちらは似てますがちょっと違って、strcpy()に対してバッファサイズ引数を書き足さなくてもいいオーバーロードが定義されます。VC++コンパイラがバッファサイズを推測可能な状況であれば、strcpy()のまま、修正なしで対処できます。

    これら2つを使うと、コード修正が少し楽になります。

    ところで修正時にくれぐれも

    strcpy_s( dst, strlen(src), src );

    などとやってはいけません。入れ物dstにはsrcを格納できるだけの十分なサイズがあるかの確認なのですから、dstのサイズを指定する必要があります。

    2010年9月10日 10:22