#pragma twice

KAB-studio > プログラミング > #pragma twice > 326 Version 15.26 「プロジェクトの設定」その他

#pragma twice 326 Version 15.26 「プロジェクトの設定」その他

前のページへ 表紙・目次へ 次のページへ

 Version 15.26
プロジェクトの設定その他

それでは今回は、【プロジェクトの設定】ダイアログの残りについて見て
いきます
結構量あるけど大丈夫?
他は、1タブ1ページだから大丈夫
あ、ホントだ。ってゆーか【C/C++】と【リンク】に詰め込み過ぎ……
それでは【リソース】ページから
リソースって、ダイアログとかアイコンとかのリソースだよね
そう、【ワークスペース】の【ResourceView】で見ることのできる、
リソースのこと。実は、リソースはコンパイルが必要なんです
え!? プログラムじゃないのに!?
ちょっとしたプログラムみたいなものだからね。えっと、これはリソース
があるプロジェクトじゃないと確認できないから、 StringTest プロジェクト
とかの、 MFC を使うプロジェクトを開いて
 Version 11.01 ( No.201 ) で作った StringTest プロジェクトね
まず、左のツリー一覧の【Source Files】の中に StringTest.rc がある
でしょ
あ、ある! ソースファイルと一緒、だからコンパイルされる、と
そういうこと。.rcファイルは、リソースの情報が書かれたファイル。こ
のファイルがコンパイルされて、 Exe や DLL に埋め込まれます
本当にコンパイルされるんだ……
で、【リソースファイル名】は、そのコンパイル後のファイル。これが 
Exe や DLL に埋め込まれます
オブジェクトファイルみたいなもの?
そういうこと。【言語】はリソースの言語。当然ここは日本語を選択しま

次の【インクルードファイルのパス】って、【C/C++】のと同じ?
それと、この下の【標準インクルード パスを無視する】と
【プリプロセッサの定義】も同じ。えっと、一度ダイアログを閉じて

メニューの【ファイル】-【開く】でファイルダイアログを表示して、
【用途】を【テキスト】にして StringTest.rc を開いて
あ、そういうことね。ほい開いた。あ、なんか結構本当にプログラムっぽ


//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
(以下略)

ここでインクルードしていることからも分かるように、リソースファイル
もファイルのインクルードを行ったり、その他のプリプロセッサも機能しま

だから、インクルードファイルの指定とか、プリプロセッサの #define 
の代わりとかも必要なのね
そういうこと。まぁ実際にはこのリソースファイルそのものを操作したり
することはないだろうから、このあたりを変更することはないかな
じゃ、次
【Midl】は、 MIDL っていうものを使う時の設定なんだけど、かなり難し
いからパス
……それってもしかして、全く触れない、ってこと?
うん、多分この関係は教えないと思う。かなり上級者向けだから
んー、簡単に言うと、どういうものなの?
【MIDL】は【Microsoft Interface Definition Language】の略で、簡単
に言うと〈クラスに、どういうメンバ関数があるのか〉っていうことが書か
れたファイルのこと
クラスのメンバ関数……? クラス見ればいいんじゃないの?
それはソースファイルの段階の話でしょ。 DLL の中にあるクラスの
メンバ関数を、実行中に取得するためのファイルがこれ
実行中……実行中!? 実行中にメンバ関数を GetProcAddress() で取得
ってできるの!?
ううん、ちょっと違う方法になるかな。そのあたりはかなり複雑な仕組み
になるから
だからパスってわけね
でも、たとえば DLL の中にあるクラスを、ソースファイルや
ヘッダーファイルがなくても使えるようになったら
確かに便利ね
これはそのための仕組みってこと
ん、なんとなくわかった
次の【ブラウザ情報】っていうのは
前に、後回しにしたやつね
 Version 15.22 ( No.322 ) とかで出てきたね。まず、【ブラウザ情報】
とはなんなのか、ということについて説明します。以下のプログラムを書い
てみて

// Main.cpp
#include <Windows.h>

void Test()
{
    OutputDebugString( "あいうえお\n" );
}

int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    Test(); // ここ。

    return 0;
}

ほいできたよ
そうしたら、〈ここ〉の方の〈Test〉をクリックして、カーソルを置い

……? カーソルって、【I】みたいなのの方のカーソルだよね
そう、マウスカーソルじゃない方。そうしたら、右クリックしてメニュー
を表示して
ほい
中に【Test の定義位置を表示】っていうのがあるでしょ
うんある。定義位置……定義って、 Test() の定義ってこと?
そう。これを選択すると、 Test() 関数の本体へとジャンプすることがで
きるんです
うわ、それ便利! さっそく……あれ?
〈このプロジェクトのブラウズ情報はありません〉って出たでしょ。この
ジャンプ機能を使うためには、〈どのソースファイルのどの行に、どの関数
の定義があるのか〉っていうのをまとめたファイルが必要なんです。それが
ブラウザ情報
それを作ってないから、ジャンプできない……
というわけで作成します。【プロジェクトの設定】ダイアログの、まず
【C/C++】-【一般】ページの右側、【ブラウザ情報を生成する】を選択し

ほい
次に【ブラウザ情報】ページを開いて、【ブラウザ情報ファイルの生成】
をオンにすれば、その上の【ブラウザ情報ファイル名】で指定したファイル
名で、ブラウザ情報が作成されます
.bscファイルってわけね
そうしたらOK押して閉じて、リビルドしてみて
ほいリビルド。あ!

ブラウザ データベースを作成中...

って出た! もうできる!?
できるよ
 Test にカーソル持ってきて、右クリックして【Test の定義位置を表示】
……あ! 上の Test() の方にカーソルが移動した!
もちろん、別ファイルにあったらそのファイルが開かれてそこにジャンプ
します
うわー、すっごい便利!
プロジェクトが大きくなったら便利かもね。ただブラウザ情報ファイル、
つまり.bscファイルは結構大きいし、環境によってはこのファイルを作るの
が結構時間掛かる場合もあるから、その辺は状況次第かな
そんなに?
 MFC を使うプロジェクトだと 3MByte くらい
うわでか! ? もしかして、 MFC のメンバ関数とかにも……
飛べるから、そういう意味ではかなり便利かも
うん便利……
残りの【カスタムビルド】【リンク前の処理】【ビルド後の処理】は、
基本的にどれも同じ。通常のビルドの前後に、特別な処理を行いたい場合に
ここで指定します
特別な処理?
たとえば Version 15.18 ( No.318 ) で紹介した、 DLL のコピーを行う
処理
あ! そういえばやったね、ビルドした後に、自動的にファイルをコピー
する方法
【カスタムビルド】【リンク前の処理】【ビルド後の処理】どれも、同じ
ように何らかのコマンドを使うためのものです。違いは、以下とおり

・カスタムビルド
 ・ビルド後に実行する
 ・特別な変数を使うことができる
 ・ファイルが更新されてない場合には実行しない

・リンク前の処理
 ・ビルド前に実行される

・ビルド後の処理
 ビルド後に実行される

【リンク前の処理】は【ビルド後の処理】の処理の〈前〉バージョン?
そういうこと。単純に、前か後かの話。【リンク前の処理】は、
ソースファイルの元になるファイルがあるときに便利かな
元のファイル?
あるファイルがあって、それを、たとえば置換したり、文字コードを変換
したり、他の言語から C++ 言語に変換したり、っていう処理をして、その
結果 .cpp ファイルが作られてから、それがビルドされる、っていう感じ
ソースファイル前のファイルがあるってことね。ちょっと複雑だけど……
っていうか、それ以上に【カスタムビルド】が複雑なんだけど
他のふたつは、単に〈コマンドを実行する〉だけだけど、この
【カスタムビルド】は、ビルドの延長なんです
ビルドの延長?
そう。コンパイルとかリンクとか、そういった関係の処理をするためのも
のです。だから、たとえば下にある【ディレクトリ】ボタンを押して、その
中の【アウトプット】を選ぶと
【$(OutDir)】って出た
これは〈出力先フォルダ〉、つまり Debug とか Release フォルダのこ
と。たとえば、こんなふうに使います

・コマンド:
copy $(OutDir)\BuildTest.exe $(OutDir)\BuildTest.exe_

・出力:
$(OutDir)\BuildTest.exe_

こうすることで、デバッグビルドなら Debug\BuildTest.exe が、
リリースビルドなら Relase\BuildTest.exe のコピーが作られます
なるほど、これならデバッグビルドもリリースビルドも関係ないわけね
このように、ちょっと凝った処理が必要な場合にはカスタムビルドになる
かな

/*
    Preview Next Story!
*/
さて、今回で DLL 編は終了です
ええっ、そうなの?
次回はまとめ。これまでを振り返ります
半年以上、中身は濃かったけど……なんか結構バラバラだったかなー
それをもう一度思い出すための、まとめだから
というわけで次回
< Version 15.27 DLL のまとめ >
につづく!
ねー、あとどんくらい?
1年くらい……かな
じゃああと3年ね
 
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
RSSに登録
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
 
このページは、Visual C++ 6.0を用いた C++ 言語プログラミングの解説を行う#pragma twiceの一コンテンツです。
詳しい説明は#pragma twiceのトップページをご覧ください。