Delphi Tips 
-----------------------------

キーワード:C++

>> Index

03/28 C++Builder でwith文の代用
02/11 BCB で実行ファイルのサイズを小さくするには
02/08 Fortran のソースを C に変換するツール
02/08 *.h ファイルから *.pas ファイルを作るコンバータ
02/08 C++ の関数の親子関係をレポートするツール
02/08 BCB1 から BCB3 へ移動したプロジェクトでのプリコンパイルヘッダ利用

最終更新: 9005 日前

0297  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 2000/03/24 濱野 rev 1.3
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2000/03/28 濱野 編集
C++Builder でwith文の代用

BCBには(というかC++には)Pascalのwith文に相当するものが
無い為、クラスのメンバの階層が深いとコード1行あたりの文字数
が無茶苦茶長くなってしまいます。

こんな時はポインタか参照変数を使えば、コード量を減らす事が
出来ます。

void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, long Col, long Row,
    TRect &Rect, TGridDrawState State)
{   char *s;
    TCanvas &cv = *StringGrid1->Canvas;

    s = StringGrid1->Cells[Col][Row].c_str();
    if (strchr(s, '?') != NULL)
        cv.Font->Color = clRed;
    else
        cv.Font->Color = clBlack;
    cv.TextOut(Rect.Left + 2, Rect.Top + 2,
            StringGrid1->Cells[Col][Row]);

}
参照:

0169  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/02/11 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/02/11 osamu 編集
BCB で実行ファイルのサイズを小さくするには

>   後、妙にファイルサイズの大きい dll が出来てしまうのが困り
> ものかも知れません (^^;; 。

VCLを使っていない場合、VCLをリンクしないようにすればファイルサイズが小さくなります。

・BCB3でVCLをリンクしないDLLの作り方
プロジェクトメイクファイルのALLOBJ行からsysinit.objを削除し、ALLLIB行のcp32mt.libをcw32mt.libに書き換える。

マルチスレッドを使っていないなら、cw32mt.libではなく、cw32.libをリンクすると、もう少し小さくなります。

VCLをリンクしない場合、空のDLLで50kバイト程度になります。
# まだ大きいですけど...
参照: [builder:6917]

0114  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/02/08 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/02/08 osamu 編集
Fortran のソースを C に変換するツール

F2C という FORTRAN to C translator を BCB1 用に移植したものがあります。
BCB3 でそのまま使えるかは未確認です。

ただ、ソースも丸ごとはいっているので、libF77.lib と libI77.lib、心配なら f2c.exe も BCB3 でリコンパイルすれば使えるかもしれません。

Makefile.BCB というので、コマンドラインからリコンパイルするようにしてあります。

BCB1 なら、make -f Makefile.BCB で問題なくコンパイルできます。

http://www.annie.ne.jp/~shimaden/
参照: [builder:6207] <開発環境>

0126  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/02/08 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/02/08 osamu 編集
*.h ファイルから *.pas ファイルを作るコンバータ

 最終的にご自分で変換するときの為に、サポートツールをご紹介します。
これらは、*.h -> *.pas への自動変換を行ってくれます。
それぞれに得手不得手がありますので、おいしいとこだけ つまんでください。(^^)

1. 熊木さんがこのMLで配付なさっていた H to Pas Converter
   [Delphi-ML:11748] が最新版?
   おっと、最新版は黒田 Dycoon さんのページにあるそうです。
   http://www.ceres.dti.ne.jp/~dycoon/

2. Command-line HeadConv C DLL header converter (HeadConv.exe [HeadConv.zip])
   Dr.Bob's Delphi Clinic
   http://www.drbob42.com/delphi/default.htm
   (ページ左のリンク "Files to Download" から取得できます。)

3. Header Translator (htrans.exe [htr034b.zip])
   Alexander Staubo's Web Page --Technical stuff
   http://www.mop.no/~alex/
参照: [Delphi-ML:23153] [Delphi-ML:22638] [Delphi-ML:11748] <開発環境> <PASCAL>

0071  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/02/08 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/02/08 osamu 編集
C++ の関数の親子関係をレポートするツール

以下の場所に「PBrows32」というフリーソフトがあります。

http://www01.tcp-ip.or.jp/~world/free/othprogram.html
参照: [builder:4912] <開発環境>

0098  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/02/08 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/02/08 osamu 編集
BCB1 から BCB3 へ移動したプロジェクトでのプリコンパイルヘッダ利用

BCB1 のプロジェクトをそのまま BCB3 でコンパイルするととても時間がかかります。これは、BCBのプリコンパイルヘッダ機能が生かされていないためです。
Builder1と Builder3でヘッダ情報のパスが違っています。
具体的には、

#include<vcl\header.hpp>  // Builder 1

#include<header.hpp>      // Builder 3

というように先頭のvcl\が無くなっています。
実際に読み込むファイル自体は同じなのでコンパイル自体は問題なく行うことができます。
結果として大きなヘッダを毎回読んでいる事になります。
次の要領でヘッダを修正してください。

1.フォーム付き(*.dfm)のユニット
  (1) ヘッダファイルを開きます。
  (2) 先頭の#includeの塊を#includeを1行だけ残して後は全て削除します。
    ただし,手作業で意図的に追加した分は残しておきます。
  (3) Ctrl+Sでそのヘッダファイルを保存します。
  (4) Builderが自動的に必要なヘッダファイルを挿入してくれます。
  (5) (2)で残った行で意図的に追加していないヘッダであれば削除します。
  (6) Ctrl+Sで(2)で消した分が挿入されます。

2.ファームがないユニット(コンポーネントなど)
 (1) ヘッダファイルを開きます。
 (2) #include<vcl\〜.h>となっている行が在ればvcl\の部分を削除します。
 (3) Ctrl+S等で保存します。
  こっちの場合には,自動的に付加してくれないのでヘッダファイル名の大文
  字と小文字も同じにする必要があります。プリコンパイルヘッダは相変わら
  ず大文字と小文字を区別しているので,db.hppとDB.hppは別物として認識し
  てくれます。
   ※例でも上げていますが,DB.hppからDb.hppにヘッダ名が変わっているの
   でDBアプリを作っている人は注意してください。

 なお,BCB3で新しくアプリケーションを作る場合には関係ありませんが,C++で書かれたコンポーネントをインストールする際には注意して下さい。
参照: [builder:5373] <開発環境>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords

Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp