- ベストアンサー
VC++6.0の基本的な質問(操作)
VC++初心者です 別々のプログラムA、とBがあったとします。プログラムAの中で使われているクラスの派生クラスをプログラムBで作ろうと思いますが、そういう場合みなさんどうしてますか(簡単な方法ありませんか)? また作ったクラスやリソースをワークスペース内から削除(コメントアウトではなく)したいのですが、うまくいきません。これも何か良い方法ありませんか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 こんな答えでよいのか判りませんが ご参考になればと思います。 お仕事でも趣味でも良く使う方法です。 VC++6.0ならMFCが使えますよね。 MFCはDLLというライブラリですが、作り手は そのサブクラス(派生したクラス) を作ることが出来ます。 これはM社さまがお勧めの方法で、 私もこれと同じように良く使うクラスをDLLにして 作っておきます。 追加するクラスがMFCを使用している 必要はありません。適当なクラスでOKです。 MFCは単純にDLLを作るためにあるのだ、 と思ってください。 適当な所に置いてパスを通して置きます。 不具合はサブクラスで修正すればよいので DLLが増えていきますがWindowsなので 気にしません(笑)。 1.DLLの作成はアプリケーションウィザードを 使って、AppWizard(dll)というのを選びます。 ※アプリケーションウィザードは既存の プロジェクトに追加することも出来ます。 2.作成するDLLの種類というのを聞いてくると 思いますので、最初に選択されている 「MFCの共有DLLを使用」を選びます。 他の選択は各自で自由に選んでください。 3.終了のボタンを押すと、theAppというオブ ジェクトが1つだけのソースが出来ます。 4.このクラスはDLLのインスタンスの実態 ですが特に作り手がなにかする訳ではあり ませんので気にしないで下さい (そのうち判ってくるでしょう)。 5.あとはここに自分で作成したクラスを追加 していきます。 6.忘れてならないのは、エクスポートの設定で、 自分で作成したクラスに __declspec(dllexport)というキーワードを つけることです。 また、同じクラスを他のプログラムで使ったり 派生させるにはこのヘッダファイルを #includeすると思いますが、 今度はここのキーワードが __declspec(dllimport)で無ければなりません。 そこでマクロを作っておいて、 DLLをメイクするときは __declspec(dllexport)を、それ以外では __declspec(dllimport)になるようにします。 → マクロは自分で考えてみてください。 以下に例を示します; 例: この例ではCMyClassのDLLをコンパイルする時に プリプロセッサの定義名としてDLLMYCLASS_MAKEを 追加してコンパイルします。 他のプログラムで使うときは定義しません。 #ifdef DLLMYCLASS_MAKE #define DLLAPI __declspec(dllexport) #else #define DLLAPI __declspec(dllimport) #endif class DLLAPI CMyClass { ... }; 7.作成されたDLLはインポート用のライブラリ (.lib)が出力先のRelease/Debugのフォルダに 出来ますので、 ヘッダファイルとこのライブラリがあれば サブクラスのDLLやプログラムが作れます。 8.拡張子が .DLL のファイルだけインポートして 使うプログラムと同じ場所か環境変数PATHが 通ったところに置いてください。 勇気があるなら、Windowsディレクトリや System32ディレクトリに置いてもOKです。 さて、後者のご質問ですが、 1.まず削除したいクラスを含むファイルを開いて いたら閉じます。 2.次に、ワークスペース(クラス一覧が表示 されているビュー)にFileViewというのが あるので、そこから削除したいクラスを含む ファイルを削除します。 マウスで選んでDeleteキーを押してください。 ヘッダファイルも忘れずに削除します。 3.さらに、エクスプローラを立ち上げて今削除 したファイルの実態を消します。 VCのFileViewは連動しているわけではないので ここは面倒なところです。Ver7.0に当たる Microsoft Visual Studio .Net 2003ではここが 改善されて一発でファイルが削除されるように なりました。 4.さらに、また面倒ですが、一度VCを閉じます (完全に終わらせてください)。 そして、エクスプローラで拡張子が .clw と いうファイルがあると思いますので、これも 消してしまいます。 これはクラスウィザードの環境ファイルです。 5.VCに戻って、Ctrl+Wと入力するとクラス ウィザードが起動しますが、設定ファイルが 無いので確認のダイアログが出ます。 [OK]を選択します。 6.次に「ソースファイルの選択」という ダイアログが出ますのでここでは単純に[OK]を 選んでください。 7.そうするとクラスウィザードからも プロジェクトからもクラスのファイルが 消えます。 8.注意点として、その消したクラスのヘッダ ファイルを他のファイルで参照(#include) していたとき、その参照は消えませんので 手動で消すしかありません。 余談ですが、 MFCを使ってプログラムをしているときで、 たとえば他のプログラムで自分用に CStaticクラスをサブクラス化したCMyStaticクラス を作ったがダイアログメンバとしてそのクラスが 使えないときなどは、普通にファイルをプロジェクト に追加しただけではだめですが、4~7を行うと 出来るようになります。 お役に立ちましたら幸いです。
その他の回答 (2)
- neKo_deux
- ベストアンサー率44% (5541/12319)
元のクラスに関連するファイルをプログラムBのディレクトリへコピー。 プログラムBのプロジェクトを開く。 [プロジェクト]-[プロジェクトへ追加]-[ファイル]から追加。 では? ファイルを開いて右クリックメニューにも項目があったかも。 あるいは、[表示]-[ワークスペース]のFileViewにエクスプローラからドラッグ&ドロップする荒技も。 削除は[Del]キーでOKだったハズ。 あるいはリソースIDや自動挿入されたソースが消えないという事でしょうか?こちらは手動で削除しかないかも。
お礼
ありがとうございます。 やってみます。
- uyama33
- ベストアンサー率30% (137/450)
消したい物を左クリックします。 上の方の、ファイル、編集、。。。 の編集をクリックして削除をクリック で消えるでしょう。
お礼
ありがとうございます。
お礼
大変お詳しいお答えありがとうございます。 さっそく試して、うまくいきました。 大変役立ちました。