今更の内容ではあるが,VC 6 プロジェクトを VC 8 などに移行する手順のまとめ.
私の場合,VC 6 からプロジェクトを作成して VC 2017 などでビルドした exe をリリースすることが多い.
他にも,コードの単体テストのためにコンソール AP を作成する時も VC 6 がお手軽.
Win11 でも MFC42*.dll などは入っているので,テストも exe をコピーすれば可能となる.
以前は VC 7 なども対象としていたが,関係するプロジェクトで必要がなくなり,今は使っていない.
また VC 7 形式を通すと vcproj を直接編集しないといけない状態になることがある.
プロジェクトのバックアップをしやすい様に exe などの出力先は,別の所を指定している.
VC 6 で MDI プロジェクトとして作成.プロジェクト名はなるべく 5 文字以下にしている.
出力ディレクトリを変更.この時 VC のバージョンごとに出力先を分けている.
C:.
└─Test
├─Debug.060
├─Debug.080
├─Release.060
└─Release.080
VC 8 で Test.dsw を開く.
文字セットを「Unicode 文字セットを使用する」に.
出力ディレクトリなどを「c:\Temp\…\$(ProjectName)\$(ConfigurationName).080」に.
「プリコンパイル済み…」を「$(IntDir)/$(TargetName).pch」に.
「C/C++」の「出力ファイル」を「$(IntDir)/」に.
「リンカ」の「出力ファイル」を「$(OutDir)/$(ProjectName).exe」に.
「プログラム データベース…」を「$(OutDir)/$(ProjectName).pdb」に.
「ブラウザ情報」の「出力ファイル」を「$(OutDir)/$(ProjectName).bsc」に.
ツリーに「MIDL」が表示されている場合は「タイプライブラリ」を「$(IntDir)/$(ProjectName).tlb」に変更.
必要に応じて,それぞれの「コマンド ライン」で 060 のままの所がないか確認.
ビルドすると次のワーニングになる.
1>------ ビルド開始: プロジェクト: Test, 構成: Debug Win32 ------
1>コンパイルしています...
1>Test.cpp
1>o:\document\vc_test\migrate\test\test.cpp(61) : warning C4996: 'CWinApp::Enable3dControls': CWinApp::Enable3dControls is no longer needed. You should remove this call.
1> c:\program files (x86)\microsoft visual studio 8\vc\atlmfc\include\afxwin.h(4477) : 'CWinApp::Enable3dControls' の宣言を確認してください。
1>リンクしています...
1>マニフェストを埋め込んでいます...
1>Test - エラー 0、警告 1
========== ビルド: 1 正常終了、0 失敗、0 更新、0 スキップ ==========
削除,または次の様に修正する.
#if(_MFC_VER >= 0x0700)
#else
#ifdef _AFXDLL
Enable3dControls(); // 共有 DLL 内で MFC を使う場合はここをコールしてください。
#else
Enable3dControlsStatic(); // MFC と静的にリンクする場合はここをコールしてください。
#endif
#endif
個人的によく変更する設定として
「C/C++」-「言語」-「OpenMP サポート」を「はい」に.
「リンカ」-「システム」-「大きい…アドレス」を「2GBを超える…サポートする」に.
Test.sln と Test.vcproj を Test_80.sln と Test_80.vcproj としてコピー.
Test_80.sln をエディタで開いて,Test_80.vcproj に.
vC 9 以降に更新する場合は Test.sln を開く.
出力ディレクトリなどを「c:\Temp\…\$(ProjectName)\$(ConfigurationName).090」などに.
VC 8 の時と同様に
Test.sln と Test.vcproj を Test_90.sln と Test_90.vcproj としてコピー.
Test_90.sln をエディタで開いて,Test_90.vcproj に.
vcproj をエディタで開くと TypeLibraryName が c:\Temp\…\Test\Debug.060/Test.tlb として残っている.
そのままでも問題はなさそうだが,修正するとすれば $(IntDir)/$(ProjectName).tlb か.
https://itl.mish.work/i_Tools/Doc/blog/migrate/Test0520.zip
2024/07/26
VC 10 以降でビルドした MDI.exe で「引数が正しくありません。」となることがある.
対応方法は InitInstance に AfxOleInit() の呼出しを追加する.
[…] VC 6 プロジェクトの移行 […]
[…] 以前は VC 7 などを通していたが,最近は VC 8 以降のみにしている. VC6 プロジェクトの移行 VC6 から VC2019 への移行 […]
[…] VC 6 から VC 2005 への移行 vc 6 から VC 201x への移行 vc 6 から VC 2022 への移行 […]
[…] VC 6 コンソール AP を順にアップしたプロジェクトを VC 11 でビルドすると, —— すべてのリビルド開始: プロジェクト: T_DbgCls, 構成: Debug Win32 —— T_DbgCls.cpp _WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h) c:program files (x86)microsoft sdkswindowsv7.1aincludesal_supp.h(57): warning C4005: ‘__useHeader’ : マクロが再定義されました。 c:program files (x86)microsoft visual studio 11.0vcincludesal.h(2872) : ’__useHeader’ の前の定義を確認してください c:program files (x86)microsoft sdkswindowsv7.1aincludespecstrings_supp.h(77): warning C4005: ‘__on_failure’ : マクロが再定義されました。 c:program files (x86)microsoft visual studio 11.0vcincludesal.h(2882) : ’__on_failure’ の前の定義を確認してください c:program files (x86)microsoft visual studio 11.0vcatlmfcincludeatlcore.h(638): error C2039: ‘SetDefaultDllDirectories’ : ‘`global namespace” のメンバーではありません。 c:program files (x86)microsoft visual studio 11.0vcatlmfcincludeatlcore.h(638): error C2065: ‘SetDefaultDllDirectories’ : 定義されていない識別子です。 c:program files (x86)microsoft visual studio 11.0vcatlmfcincludeatlcore.h(640): error C2065: ‘LOAD_LIBRARY_SEARCH_SYSTEM32’ : 定義されていない識別子です。 ========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ========== […]