Visual Basic 6.0 テクニック
VB6対応

 

Visual Basic 中学校 > VB6 テクニック >

11.プロジェクトを構成するファイル

 

今回は具体的なプログラミングからは少し離れてVBでプロジェクトを作る際に生成されるファイルについて説明します。たとえば、拡張子がvbpやfrmのファイルはVBプログラマには見慣れて存在でしょう。

これらについての知識は勉強のためだけでなく実践でも役に立ちます。それぞれのファイルについてよく知らない人はぜひ一読ください。

それから、今回はVB6を対象に説明しています。VB5でもそれほど違うわけではありませんが一部当てはまらない部分もあるかと思いますのであらかじめご了承ください。

 

1.VBで使うファイル

 

ご存知のようにVBは1つのアプリケーションのプログラムを「プロジェクト」という単位で管理しています。このプロジェクトの中にフォームを作ったりクラスを作ったりしていくわけですね。VBでプログラムを保存する場合には1つのプロジェクトでも複数のファイルに分かれて保存されます。このときに生成されるファイルはプロジェクトの内容によって大きく異なりますがそのすべてをあげると次のようになります。

拡張子 内容
.bas 標準モジュール
.cls クラス モジュール
.ctl ユーザー コントロール ファイル
.ctx ユーザー コントロール バイナリ ファイル
.dca Active デザイナ キャッシュ
.ddf ディストリビューション ウィザードの CAB 情報ファイル
.dep ディストリビューション ウィザードの依存ファイル
.dob ActiveX ドキュメント フォーム ファイル
.dox ActiveX ドキュメント バイナリ フォーム ファイル
.dsr Active デザイナ ファイル
.dsx Active デザイナ バイナリ ファイル
.dws ディストリビューション ウィザードのスクリプト ファイル
.frm フォーム モジュール ファイル
.frx バイナリ フォーム ファイル
.log 読み込みエラー時に生成されるログ ファイル
.oca コントロール タイプ ライブラリ キャッシュ ファイル
.pag プロパティ ページ ファイル
.pgx バイナリ プロパティ ページ ファイル
.res リソース ファイル
.tlb リモート オートメーション タイプ ライブラリ ファイル
.vbg Visual Basic グループ プロジェクト ファイル
.vbl コントロール ライセンス ファイル
.vbp Visual Basic プロジェクト ファイル
.vbr リモート オートメーション登録ファイル
.vbw Visual Basic プロジェクト ワークスペース ファイル
.vbz ウィザード起動ファイル
.wct WebClass HTML テンプレート

この表にはVBで保存を含めた作業中に生成されるすべてのファイルが掲載されているので中には見たことのないファイルもあることと思います。逆にこれらすべてのファイルを自分のプログラムで使った(作った)事があるという人は相当VBの経験を積んでいる人でしょう。

さて、VBが生成するファイルは実は他にもあります。もう一度書いておくと、上の表は保存を含めた作業中に生成されるすべてのファイルです。それではそれ意外にファイルが生成されるタイミングは何かというと コンパイルするときです。コンパイルするときに生成されるすべてのファイルの一覧をこの下に掲載します。

拡張子 説明
.dll インプロセス ActiveX コンポーネント
.exe 実行可能ファイルまたは ActiveX コンポーネント
.ocx ActiveX コントロール
.vbd ActiveX ドキュメント ファイル
.wct WebClass HTML テンプレート

さて、以下ではこれらのファイルのうち代表的なものについて説明します。

 

2.vbp  Visual Basic Project ファイル(プロジェクト)

 

vbpファイルはVBでプロジェクトを保存するときには必ず生成されます。また、vbpファイルをダブルクリックするとそのプロジェクトを開くことができます。このことからvbpファイルはVBプロジェクトの中心的ファイルと呼ぶことができます。

しかし、vbpファイルにはプログラムは保存されていません。プロジェクトの設定が保存されているのです。そのためどんなに巨大なプログラムを作っても生成されるvbpファイルのサイズはあまり変わりません。また、vbpファイルを大切に取っておいてもプログラム自体をとっておいていることにはならないので注意してください(プログラムの内容は後述するfrmファイルや、clsファイル、basファイルなどに保存されています)。

では、vbpファイルに何が保存されているのか中をのぞいて見ましょう。vbpファイルの中を直接見るにはメモ帳やワードパットを起動して[ファイル]メニューの[開く]から、目的のvbpファイルを選択してください。(このときファイルを開くダイアログのフィルターが(*.txt)になっている場合はvbpファイルが表示されないので、適当なフィルタを選択してください)。

私が作ったあるvbpファイルを開くと次のような内容が記載されていました。

Type=Exe
Form=frmMain.frm
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#D:\WINNT\System32\stdole2.tlb#OLE Automation
IconForm="frmMain"
Startup="frmMain"
HelpFile=""
Title="TestProject"
ExeName32="TestProject.exe"
Command32=""
Name="TestProject"
HelpContextID="0"

………(以下省略)

 

まず、メモ帳で開けるところからわかるように、vbpファイルの実態は単なるテキストファイルなのです。つまりテキストファイルの拡張子(txt)がvbpになっているだけなのです。

次に内容を見て見ましょう。

上の例では3行目が長いのでインターネットで見るともしかしたら2行に分かれているかもしれませんが3行目はReferenceではじまりAutomationで終わります。

見るとわかるのですがプロジェクトファイルの各行は Type=Exe のように = で結ばれています。これがプロジェクトの設定なのです。これらの設定のほとんどはVisual Basicでプロジェクトのオプションを使って設定できます。

もう少し詳しく見て見ましょう。Type=Exeはこのプロジェクトがexeファイルを作るためのものであることを示しています。Form=frmMain.frmはこのプロジェクトにはfrmMain.frmという(ファイルで定義されている)フォームがあることを示します。Reference=の行はこのプロジェクトの参照設定を示します。フォームや参照設定を増やすとこれらの行も増えていきます。

IconFormはこのプロジェクトがexeになったときのアイコンを所有するフォームの名前で、Startupはこのプロジェクトを実行した場合どのプログラムが最初に実行されるかを示します。

こんな具合でまぁいろいろのっているわけですが、先ほども書いたようにこれらの設定はVisual Basicからいじれるので直接vbpファイルを開いて編集しなければならないような場合はほとんどありません。

直接編集したくなるのはどんな場合かというと、たくさんのプロジェクトの設定をまとめて変更したい場合などでしょうか。この場合はいちいちVBを開いて設定をいじるよりはテキストを開いていじるか、もしくはvbpファイルの設定を一括していじれるような仕組み(たとえばそれようのプログラムを自作する)を用意した方が早いでしょう。

それから、環境が変わってプロジェクトファイルが開けなくなった場合にも直接いじったりします。このケースではほとんどの場合参照設定をいじることになります。もちろんVBで強引に開くこともできるのですがその場合はそのまま保存すると無効な参照設定は削除されてしまうので注意が必要です。

 

3.frm    Form ファイル(フォーム)

 

拡張子がfrmのファイルはVBで作成したフォームのプログラムや設定を保存している重要なファイルです。実際にフォームに書いたプログラムはすべてこのfrmファイルに保存されます。また、それ以外にも配置したコントロールのプロパティや設定などが保存されています。

つまり、このfrmファイルはまるごと1つのフォームを表しているのです。(ただし、これとは別に後述するfrxファイルが生成される場合もあります)。

frmファイルもvbpファイルと同様で実態はテキストファイルです。そして、frmファイルがテキストファイルであるということは重要です。このことによりファイルの全文検索はfrmファイルに対しても有効ということになるのです。

全文検索が有効とはどういうことか説明しましょう。たとえば、あなたがSetWindowLong関数を使いたいとします。そして昔SetWindowLong関数を使ったことがあってそれをみながら作業したいと考えたとします。その場合はどうしますか?SetWindowLong関数を使ったフォーム(やモジュールなど)の名前を覚えていれば簡単ですが覚えていない場合は?

この場合は、Windowsの全文検索を利用することができます。Windowsのファイルの検索で[含まれている文字列]にSetWindowLongを指定して検索してみてください(これはWindows2000の場合で他のバージョンのWindowsでは若干違うこともあります)。みごとにSetWindowLongが使われているフォームやモジュールなどが検索に引っかかることがわかります。

この全文検索はテキストファイル(もしくはテキストファイルとみなせるファイル)にのみ有効なのでfrmファイルはこの恩恵にあずかれるというわけです。

余談ですがでこの例を実際に試してみるとexeファイルやdllファイルが数多くヒットします。これはexeやdllのインポートテーブルにSetWindowLong関数が記載されているからでしょう。フォームののみヒットさせたい場合は検索の条件にファイルの種類 frm (Visual Basic Form File)を追加しておくとよいでしょう。

さて、それではfrmファイルの内容についてみてみましょう。frmファイルは次の順番で構成されています。

1.バージョン

2.フォームのプロパティ

3.コントロールのプロパティ

4.属性

5.プログラム

5のプログラムはVBでも表示されているプログラムの部分なのでここで改めて説明はしません。1〜4の部分は普通にVBをやっていては表示されない部分です。とはいってもたとえば2と3のプロパティはVBのプロパティウィンドウからいじれたりするようにVBを使って何らかの方法で設定することはできます。

以下に私が試しに作ってみたfrmファイルの内容を示します。これはWindowsのメモ帳でfrmファイルを開くことによって見ることができます。

VERSION 5.00
Begin VB.Form frmMain
    Caption = "Form1"
    ClientHeight = 4035
    ClientLeft = 60
    ClientTop = 345
    ClientWidth = 5505
    LinkTopic = "Form1"
    ScaleHeight = 4035
    ScaleWidth = 5505
    StartUpPosition = 3 'Windows の既定値
    Begin VB.CommandButton cmdMessage
        Caption = "表示"
        Height = 495
        Left = 1800
        TabIndex = 0
        Top = 1800
        Width = 1575
    End
End
Attribute VB_Name = "frmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

Private Sub cmdMessage_Click()

MsgBox "Hello!"

End Sub
 

先頭にある、VERSION 5.00 というのが先ほどあげた「1.バージョン」の部分に相当します。このバージョンはVB5でつくってもVB6でつくっても常に 5.00 を示しています。また、作ったばかりのフォームでも作ってから何回も変更してうファイルでも常に 5.00 です。この数字をいじるとVBから警告が表示されたり変になったりするので 5.00 のままそっとしておいてください。

次の Begin VB.Form frmMain から End までの部分が「2.フォームのプロパティ」に相当しますがこのブロックの中に Begin VB.CommandButton cmdMessage 〜 End というブロックが入っています(ネストされています)。このネストされた部分が「3.コントロールのプロパティ」にあたります。内容は特に解説しなくてもわかるでしょう。プロパティウィンドウに表示されている内容と一緒ですしね。

ところが実はここで巧妙なテクニックがあるのです。実はこの部分には変更したプロパティだけが記載されていてデフォルトのプロパティは記載されないのです。昔作ったプログラムや他人が作ったプログラムを見ていると「あれ、このテキストボックスのプロパティはどういう風に設定してあるのかな?」みたいなことを思ったりするときがありますよね。そんな場合はVBのプロパティウィンドウを上から眺めていってチェックするしかないのですが、frmファイルを上の例のようにテキストファイルとして開いてしまうと、変更したプロパティは一目瞭然というわけなのです。

さて、プロパティの下にはAttribute で始まる行が何行か続きます。これが「4.属性」の部分で、その下が「5.プログラム」の部分です。普段VBから見ているとこのプログラムの部分しか見えていませんが、実はこんなにたくさんの内容がfrmファイルに記述されていたのでした。

 

4.bas    Basicファイル(標準モジュール)

 

basファイルはVBで標準モジュールを保存すると生成されるファイルで、実態はテキストファイルです。basファイルはfrmファイルと違ってコントロールを配置することはできないので属性とプログラムだけが保存されます。このうちVBから見ることができるのはプログラムの部分です。

 

5.cls    Classファイル(クラス)

 

clsファイルはVBでクラスを保存すると生成されるファイルで、実態はやはりテキストファイルです。ただし、クラスファイルにはプロパティがあるのでこのファイルの内容は、クラスのプロパティ、属性、プログラムの順で並んでいます。

VB6で作ったクラスをVB5で開くと属性の部分でエラーが発生しますが無視して読み込むことができます。この場合はエラーが発生した属性はプログラムであるとみなされてプログラムの先頭に表示されてしまいます。手動でこの部分を削除すればVB5でも正常に作動させることができます。

 

6.frx    Form Binaryファイル(バイナリフォームファイル)

 

frxはVBでフォームを保存するときに生成されることがあります。frxファイルが生成されるのはフォームやフォームに配置したコントロールのプロパティの中にバイナリ形式のものがあった場合です。その場合、そのバイナリ形式のプロパティはfrmファイルとは独立して、このfrxファイルに保存されるのです。

バイナリ形式のプロパティとはどういうものかというと、簡単に説明すると画像データのように文字列では表現できないものです。たとえば、ピクチャーボックスのPictureプロパティになにかの画像を読み込んでおいてファイルを保存しましょう。そうするとfrxファイルが生成されたその画像を保持します。このケースでfrmファイルのプロパティの部分は次のようになっています。

Picture = "frmTest.frx":0705
 

これはPictureプロパティの値はfrmTest.frxファイルの705バイト以降に記載されているという意味です。frmファイルにこのような記述があるとVBは該当するfrxファイルを読みにいきます。

このfrxファイルは繰り返すようですがバイナリファイルなのでテキストとして開くことはできません。

 

7.vbw    Visual Basic WorkSpaceファイル(ワークスペース)

 

このファイルはプロジェクトを保存するときに生成され、実態はテキストファイルです。内容はVBの作業スペースの情報を保持しています。

作業スペースの情報とはプログラム中に開いているウィンドウとか、そのウィンドウの座標とかです。これらの情報はプログラム中だけ使用されるので完成した場合には無用です。しかし、大部分の人にはプログラム中でも不要でしょう。実際このファイルは削除しても平気です。

但し、このファイルの使用についてはマイクロソフトから正式な情報はないので削除した場合の動作は保証できません。とはいっても私はいつも平気で削除します。ときに自分がつくったプロジェクトを人に渡す場合はこのfrwファイルは余分なファイルをして渡さないようにしています。まぁ別に渡したからといって個人情報が漏れたりするわけではないので気にしなくてもよいのですが。

 

8.log    Logファイル(ログ)

 

このファイルはフォーム読み込み中にエラーが発生した時に生成されます。実態はテキストファイルでエラーの内容が記録されますから問題があるときに解決する糸口となります。エラーの内容を記録しておく必要がない場合やすでにエラーを修正してログが不要になった場合などには削除してもかまいません。

このファイルにはたとえば次のようなメッセージが記載されます。

コントロール lrSwitchText はロードできません。

このメッセージのはVBがlrSwitchTextというコントロールを認識できなかったのでフォームのその部分の記述は適当なものに置き換えられたということを示します。

このほかにもいろいろなメッセージが表示されます。これらのエラーのほとんどは環境が変わった場合に表示されます。

 

9.res    Resourceファイル(リソース)

 

resはプログラム中に特に指定してリソースファイルを使用した場合にのみプロジェクトの一員となります。形式はバイナリで、内容はプログラマの自由ですが、ほとんどの場合プログラムで使う画像やアイコン・サウンドを格納するのに使います。

画像やサウンドをファイルとして使用してもいいのですが、まとめて1つのexeにコンパイルしたい場合もありますよね。こんなときにリソースファイルを使用すると便利です。まぁ「リソースファイルとは何か」というのはここのテーマではないのでここまでにしておきます。

なお、リソースファイルを作るにはVB6ではVBに付属のリソースエディタを使いますが、VB5ではそのような便利なツールがないので面倒くさいです。一応VB5のCDの中にリソースファイルが作れるツールが入っているようですがはっきりいって使いにくいです。説明も英語だしよくわかりません。

 

10.dll    Dynamic Link Libraryファイル(ダイナミックリンクライブラリ)

 

dllファイルはVBでコンパイル時に作成されるファイルの1つです。プロジェクトの種類で「標準EXE」ではなく 「ActiveX DLL」などを選択した場合に作成されます。

なお、拡張子がdllのファイルはたくさんあるのですがいくつか種類があるので注意してください。VBで作成できるのはActiveX DLLです。これは「COMコンポーネント」ともよばれます。またVBであってもProfessional Editoin以上でないとDLLを作成することはできません。

dllは多くのexeと違って単体では実行できないのでダブルクリックしても無駄です。ただし、クイックビューワというソフトが入っている場合にはDLLの詳しい情報を見ることができます。クイックビューワはWindows98SE以下、またはWindowsNT4.0以下に付属しているようです。(MeやXPはわかりません。2000には付属していません)。

 

11.exe    Executableファイル(実行可能ファイル)

 

exeファイルはVBで「標準EXE」を作っているときにコンパイルするとできるファイルです。ダブルクリックすることでプログラムを実行できます。さて、Windowsのexeファイルは「PEフォーマット」とい形式のファイルでヘッダーやセクションのフォーマットが定められています。

そのため、バイナリデータとしてexeファイルを読み込んでヘッダーなどを解析することによってexeファイル内のデータを取り出すことができます。

実行部はマシン語で表現されていますが、マシン語とアセンブリ言語は1対1のニーモニックで対応しているのでexeファイルを逆アセンブラ(逆コンパイル)して、アセンブリ言語に翻訳することもできます。逆アセンブラするソフトはフリーソフトにもあるので興味のある方は試してみてください。(製品ソフトの中には使用許諾書の中で逆アセンブラを禁止しているソフトが多くありますので注意してください)。

また、Visual C++でexeファイルを直接デバッグすることもでき、その場合はVBで作ったexeといえども画面にはアセンブリ言語が表示されます。但し、VBでコンパイルするときに「シンボリック デバッグ情報の生成」をチェックしておくとこのときにコメントとしてVBのコードも表示されます。VBを極めたい方はどうぞご利用ください。

知らない人のために書いておくと、アセンブリ言語とは原始的なプログラミング言語の一種です。

 

12.ocxファイル    (ActiveXコントロール)

 

ocxファイルはVBでいうとコントロールを表しています。たとえば、スライダーバーやトグルボタンなどの追加できるコントロールの実体はすべてocxファイルです。

また、Professional Edition以上のVBでは自分でocxファイルを作ることもできます。この場合はプロジェクトの種類で「ActiveX コントロール」を指定します。

dllやexeやocxはすべてコンパイルによって生成されるファイルですのでバイナリファイルで、似たような性質を持っています。ただし、単体で実行できるのはexeファイルだけです。

 

13.最後に

 

VBと関係のあるファイルはまだまだあるのですが今回のように要点をかいつまんだ説明ではこれ以上続けてもあまり利益はないでしょう。

最初の方に触れたvbpファイルやfrmファイル、frxファイルの知識は後々役に立つと思います。特にテキストファイルとして開けることをご存じなかった方には興味ある話だったのではないでしょうか?

それでは、失礼します。