Classic-CAD C6(MSDEV)からC9(VS2008)へ移行する方法
2009/11/09-2010/05/17-2010/08/24
はじめに
C6発売中止から、約10年。待望の脱MFC開発キットが完成しました。改良中の新しいClassic-CAD本体は、古いDLLを実行しつつ、新しいDLLに対応しています。これにより、これまで通りのC6による開発も可能ですが、OSがWindows7になり、C6での開発は困難を極めています。
Windows7発売を機に、CLassic-CAD開発環境も、Windows7の64Bit版になってしまいました。そこで、VisualStudio-2008による開発に移行すべく、本体と、移動コマンド等(P8全部)の改良でテストを進めた結果、移行可能と判断しました。
またこれを機に、MFCの宣言をすべて外し、無償の開発環境VS2008 Express Edition でも開発できるように改良しました。
関係各位におかれましても、VisualStudio-2008による開発に挑戦されますことを、切に希望する次第であります。
このキットは主に古いプロジェクトからの移行を説明してあります。新規に起こす場合は、付属のサンプルを参考にしてください。(といっても、古い形式と変わるところは、ほとんどありません)
☆一言アドバイス☆
VS2008も既に過去の開発環境になって、今やVS2010ですが、2010でも行けると思います。2010は2008より重いと使っているものが言っていましたが…。
☆開発ツール☆
無償のVS2008
Express Edition Visual C++は下記ページからダウンロードできます。
http://www.microsoft.com/japan/msdn/vstudio/2008/product/express/offline.aspx
これはDVDイメージなので、ダウンロード後DVDに移す必要があります。このページもいつまであるかわかりません。
現在はVS2010ExpressEditonになっていて、
下記ページからダウンロードできます。
http://www.microsoft.com/japan/msdn/vstudio/Express/
以下抜粋
Visual C++ 2010
Express はよりパワフルで柔軟な開発環境を提供し、Windows
ネイティブなアプリケーションやおよび 3D の 2D ゲーム開発を支援します。Win32 API を完全活用したアプリケーションを作成できる Windows
Platform SDK も同梱されています。
キット内容
(1) ヘッダーファイル (プロジェクトフォルダーの一つ上のフォルダーに置きます)
Basic.h Drafont.h Xca.h Xhead.h Xutl.h
(2) Cppファイル (プロジェクトフォルダーの中に置きます)
CODRAX.cpp
(3) サンプルソース各種
☆一言アドバイス☆
新規に作る場合は、このキット内容のフォルダー構成を参考にしてください。
また、ひとつ作って、フォルダー毎コピーして、中身を変えるというやり方は、今回も有効です。
2.移行手順概要
全体の手順は、
(1)C6時代のプロジェクトを2008用にコピーします。
(2)2008でプロジェクトを開きます。 DSWを選んで開きます。質問にはYESで答えます。
(3)プロジェクトを右クリックして最下段の「プロパティー」を選んで表示されるダイアログで、コンパイル条件を変更します。
(4)プログラムを変更します。
となります。
また、VS2008用では、MFCを全く使わないように宣言を変えたり、コンパイラの仕様変更への対応をしていますので、必ず、付属の5つのヘッダーを使用してください。
3.移行手順の詳細
(1)C6時代のプロジェクトを2008用にコピーします。
2008では、関数ポインタ宣言で、引数の省略ができなくなったために、C6のソースファイルにかなり手を入れなくてはなりません。この手入れの段階で、操作ミス等で、1行なくなったとか、引数の値がわからなくなったなどの問題が発生します。
古いソースは必ず、残しておいてください。
(2)2008でプロジェクトを開きます。
古いプロジェクトを開きます。古い拡張子はDSWです。読み込まれた後では、SLNに変わります。これで、もうC6ではコンパイルできなくなります。
プロジェクトを開く
DSWファイルを選びます。
変換します。
VS2008は、「CODRA.DSW」を覚えてしまうので、次回だけは、「ファイル」「開く」「プロジェクト」で、「CODRA.sln」を選択します。次からは「最近使ったプロジェクト」で開けます。
以下のファイルはいりません。
STDAFX .h .cpp
Script1 .aps
Resource .h
CODRA .mdp .001 .dsw .dep .dsp .opt .plg
(3)プロジェクトのプロパティーの変更
ソリューションエクスプローラを表示します。
プロジェクトを右クリックします。
最下段のプロパティーを選びます。
重要:「継承プロパティーシート」の中身を削除します。
☆一言☆
プロパティーのタイトルが「CTES」になっていますが、気にしないでください。
簡易リビルドを行わない。
☆一言☆
Pchファイル名が何になっていても気にしないでいいです。
「インクリメンタルリンクを有効にする」を「行わない」にする。
☆一言☆
これはちゃんと作ってあればどちらでもOKです。
☆一言☆
マニフェスト生成は「はい」になってますが、「いいえ」でも大丈夫でした。
☆言い逃れ☆
「設定は絶対これ」という確信はありません。臨機応変にお願いします。
(4)プログラムを変更します。
プログラムの変更は
A)ソリューションの変更
B)リソースファイルの変更
C)ヘッダーの変更
D)CPPの変更
になります。
A)ソリューションの変更
ヘッダーディレクトリに入っている
CODRAX.cpp
を自分のプロジェクトのフォルダーにコピーして、プロジェクトに加えてください。
項目(ファイルの事です)を追加します。
Source Files
CODRAX,cpp 追加します。
MFCを使わなくなったので、MFCに関係するファイルをプロジェクトから外します。検索用にヘッダを追加しておきます。
Header Files
xxx.h
Stdafx.h
完全に削除してOK
Resource.h
完全に削除してOK
リソースファイル名称を変更します。
Source Files
Script1.rc → CODRA.rc
その他、下記ファイルはいらないので、削除してかまいません。
CODRA.opt CODRA.plg CODRA.dsp CODRA.001
CODRA.mak CODRA.dsw CODRA.mdp CODRA.dep
Script1.aps STDAFX.CPP
B)リソースファイルの変更
CODRA.rcを右クリックして「ソースの編集」を選択。
必要な、ビットマップ項目以外をすべて削除する
C70 BITMAP DISCARDABLE "c70.bmp"
アイコンを読むのに必要なので、こんな形の行だけ残して、後は、削除してください。
C)ヘッダーの変更
「CODRA.h」に#include "Stdafx.h"の行があれば、削除する。
また、出来たら、
#include <float.h>の次の行に
#include <direct.h>
を加える。_mkdirなどのディレクトリ処理をする場合だけ必要。
D)CPPの変更
@ 警告の無視
CPPファイルの
#include "CODRA.h" // これはいじらない
の下に
#pragma warning(disable : 4996) // fopenの警告無視
を加え、
最後の行に
#pragma warning(default : 4996) // unsafeの警告
を加える。
これは、strcpy()やfopen()などの、あまり使って欲しくない関数に対するWorning表示を表示させなくする宣言です。なぜ使って欲しくないかというと、メモリーエラーを起こしやすく、ウィルスに利用されやすいからだという説がありますが、代わりに推奨されている関数では、文字数を引数に入れているだけで、とても安全とは言えません。プログラマーのレベルが低いと、たしかに、エラーを引き起こしやすい関数ですが、それは、大きなお世話です。
CODRA.hファイルの最後の行に
#pragma
warning(disable : 4996) //
fopenの警告無視
を加えておけば、個々のCPPファイルに手を加える手間が省けます。
A 省略引数への対処
Classicで使う関数の多くは、引数を省略して書いてあります。普通の関数ならば、OKですが、関数をポインタで宣言する場合に、C7以降、この仕組みが利用できなくなりました。したがって、コンパイルして、「引数が少なすぎます」と言われた関数については、すべての関数名を変更する必要があります。
大文字で書かれた関数は、Xhead.hとBasic.hで自動的に定義を変えてあるので、そのまま使えます。
Xproc->xxx()の形で書いた呼び出しでエラーが出た場合は、大文字にするか、
Xproc->をcodra_に置き換えて、codra_xxx()の形にするネーミング方法で書き換えてください。
以上です。