VC++6.0 から .NET や VC++2005以降への移行に関するメモ


このページの最後へ    

VC++6.0から .NET以降のプロジェクト移行は、自動的におこなってくれるので特に問題はありません。

しかしコンパイラの仕様等が変わり、大量のワーニング(警告)やエラーが出ます。
ワーニングに関しては抑止指示をすれば何とか通りますが、エラーに関してはひとつづつ潰しかありません。

過去の古い言語仕様を引きずっているのもあり、本来の処理より独自のコントロール・ライブラリーの改造の方が大変かも知れません。(雑誌・ネット等から流用したものは、自分で再度仕組みを調べねばならない。)

Windows 3.1時代に作成したコードも、今思えば下手なことをしていますが、問題無くVC++2008に移行できました。業務用のややこしい部分を再コーディングするには大変(時間もない)!


※Windows Vista以降は、VC++6.0がインストールできないのでVirtualPCを利用する

※Windows 7 で VC++6.0 がインストールできる!
SP6を適用し、特に問題なくコンパイルができました


プロジェクトの移行
VC++ 6.0プロジェクト内の dsp 又は dswファイルを開けば、自動的に変換してくれる。
変換後は sln (ソリューション)を開く。

変換前に、不要な ncb、 opt、 PLGファイルは削除しておく。
変換後のVC++6.0のプロジェクト dsp は、消さず残しておいた方が良い。



プロジェクトにソースファイルの追加
「プロジェクト(P)」→「既存項目の追加(G)」で「既存項目の追加」ダイアログを開き
追加するソースファイルを選択し、「追加」ボタンをクリックする。



プロジェクトのソースファイルの削除
「表示(V)」→「ソリューションエクスプローラ(P)」で「ソリューションエクスプローラ」を開き
対象ファイルを右クリックして、「プロジェクトから削除」をクリックする。



プロジェクトにライブラリの追加
@「プロジェクト(P)」→「〜のプロパティ(P)」で「プロパティ ページ」を開き
  「構成プロパティ」→「リンカ」→「入力」で、「追加の依存ファイル」に ライブラリ名を入力する。

A上記の方法だと、プロジェクト毎に設定が必要なので、ソース内に記述した方が便利
#pragma comment(lib, "ライブラリファイル名")  例)-> #pragma comment(lib, "UNLHA32.LIB")



warning C4996: strcoy等のバッファ・オーバーラン対策の関数
@大量の警告メッセージ対策 warningを出さないようにするには、
  #define _CRT_SECURE_NO_DEPRECATE 1  を定義する。

又は、 #pragma warning(disable: 4996) を定義する。

A個別に置き換える
 ルーチンのマップ(CRT) を参考にして、修正する
 注)修正すると、当然 VC++6等でエラーになり相互利用できないので、上記@の方が良さそう。

 例) itoa,atoi等の非標準のCライブラリ関数 ( The POSIX name for this item is deprecated 廃止予定 )
     前にアンダースコアをつける。 _itoa  _atoi



warning C4995: ○○○は将来のリリースではサポートされなくなる可能性があります。
こう言われても、修正には多大な労力が必要なので、warningを出さないようにする。
 #pragma warning(disable: 4995) を定義する。 


DAOのDFX変換のNULL対策
   //{{AFX_FIELD_MAP(CXXXSet)
         pFX->SetFieldType(CDaoFieldExchange::outputColumn);
         DFX_Single  (pFX, _T("重量"            ), m_nJyuryo  );
         DFX_Short   (pFX, _T("数量"            ), m_nSuryo   );
      //}}AFX_FIELD_MAP
NULLの場合、ゼロにならない。 フィールドのNULLを判断するようにする。(VT_NULL)



forループでの変数スコープ
VC++6.0以前 .NET以降
 for (int i=0; i<10; i++) {
   ・・・・・
 }

 for (i=0; i<10; i++) {
   ・・・・・
 }
 for (int i=0; i<10; i++) {
   ・・・・・
 }

 for (int i=0; i<10; i++) {
   ・・・・・
 }
又は、forの外で iを宣言しておく。

または 「プロジェクト」の「プロパティ」の「C/C++」の「言語」の
     「forループスコープの強制準拠」を「いいえ(/Zc:forScope-)」 に設定



ユーザー定義メッセージの関数プロトタイプ
void が無くなり、LRESULTに変更  値を返すようにする。
afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam);  →

afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);


CreateProcessの第2引数がPCTSTR(const文字列)ではなくPTSTR(非const文字列)
第2引数に読み取り専用領域を渡すとアクセス違反
CreateProcess(NULL, "C:\\sample.bat", NULL, NULL, NULL, NULL, NULL, NULL, &si, &pi);


TCHAR szCmd[] = TEXT("C:\\sample.bat");
CreateProcess(NULL, szCmd, NULL, NULL, NULL, NULL, NULL, NULL, &si, &pi);


warning C4996: 'CWinApp::SetDialogBkColor': CWinApp::SetDialogBkColor is no longer supported.
SetDialogBkColor は対応しなくなったので、必要ならば、ダイアログ毎に個別で設定する。

  BOOL CTheApp::InitInstance()
  {
    SetDialogBkColor(); // ダイアログ背景色をグレーに設定します。
    LoadStdProfileSettings(); // 標準 INI ファイルをロードします。(MRU を含む)

    ............
    .............

    return TRUE;
  }

@ダイアログのOnPaint()で設定 のサンプル3
AダイアログでOnCtlColor のハンドリングし、背景ブラシを渡す のサンプル1・2



XPスタイルの外観 
「プロジェクト(P)」→「〜のプロパティ(P)」で「プロパティ ページ」を開き
プロッジェクトの「マニフェストツール」で 「追加のマニフェストファイル」で指定する。

例) $(ProjectDir)additional.manifest を作成して追加



Vistaから、パスワード文字が * から ● に変更
もし、スクロール指定していなければ、半分しか入力されないので、 ES_AUTOHSCROLL を指定するか、
パスワード文字を従来どおりの* にする。 → パスワード文字の変更



XPスタイルで、Vistaからカレンダーのデザインが変更

新カレンダーのサイズに合わせてデザインしなおし・・・


実行環境へ配布するDLL等 (VC2005以降は Side-By-Side実装になった Win SxS ) 
単純にDLLも配布するわけにもいかず、やっかいです。(Static Linkにするとプログラムサイズが大きすぎ)

VC2008 再配布するDLL              Microsoft Visual C++ 2008 再頒布可能パッケージ (x86)
VC2005 (VC++.NET2005)再配布するDLL    Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x86)



....................................................................................................................................................................................................................................................................................


    ※Visual Studio 2008起動時間を早める方法 (ニュースチャンネルは不要)

スタート・ページを非表示にする
「ツール(P)」→「オプション(O)」で「オプション」ダイアログを開き
「環境」→「スタートアップ」を選択し、「スタートページの表示」を変更する。


「スタートページの表示」を「空の環境の表示」に設定



VS2008起動時にスプラッシュを表示させない
「ツール(T)」→「オプションロパティ(P)」で「プロパティ ページ」を開き






....................................................................................................................................................................................................................................................................................

Google
WWW を検索 www.crimson-systems.com を検索

このページの先頭へ かぶとむしと林のなかまたち 生き物ギャラリー 生き物ギャラリー2 庭木・草花 機関車トーマス関連 ゲーム

CRIMSON Systems Homeへ Copyright (C) CRIMSON Systems