Cからの移行、ヘッダーファイルの作り方について

解決


らりばど  2002-03-27 17:16:40  No: 713  IP: [192.*.*.*]

以前お世話になりました「らりばど」です。
また判らないことがあり教えていただきたいのです。

環境:Windows2000 + Delphi6

汎用的に使うユーザ関数を目的別にわけてC言語でいうところの
ユーザヘッダファイルみたいなものにしてソースを整理したいと
思っています。

ヘルプを見ると、uses節の構文で、予約語[in]とソースの場所指
定をすることで可能とありますが、ソースを切り取ったファイル
を指定するだけではコンパイルできず、
「〜.dcuが見つかりません」とエラーになってしまいます。

ソース一例
> uses SysUtils, in '〜.pas';
'〜.pas'は関数部分を切り取ってテキスト形式で保存したもので
す。

おそらくヘッダファイルにしようとしているファイルの生成方法
に問題があるのではないかと思っていますが、作り方がわかりま
せん。
何かコンパイルするなど必要なのでしょうか。

よろしくお願いします。

編集 削除
らりばど  2002-03-27 17:22:11  No: 714  IP: [192.*.*.*]

書き忘れたので補足します。

コンソールアプリケーションのソースより引数判定のロジックを
関数化しました。
プログラムの本数もそれなりに多くなってきたので、全てのプロ
グラムをメンテナンスするのが面倒になってきたので、C言語み
たくヘッダ化しようと思った次第です。

編集 削除
にしの  2002-03-27 17:46:14  No: 715  IP: [192.*.*.*]

ヘッダファイルとはちょっと違いますが、ユニットをわける場合ならば、必要なユニットをuses節に加えればOKです。

たとえば、
------------------------------------------------------------
program Test;
{$APPTYPE CONSOLE}
uses
  SysUtils,
  Unit2;

// 追加のユニット
begin
  proc1; // Unit2で定義されたプロシージャ
end.
------------------------------------------------------------
unit Unit2;

interface

uses
  SysUtils;

  procedure proc1;

implementation

procedure proc1;
begin
  writeln('proc1');
end;

end.
------------------------------------------------------------
こんな感じ。

たとえば、Unit2.pasのunit節が、
unit Unit1;
だったら、Test.dpr(上の方のソース)では、
uses
  SysUtils,
  Unit1 in 'Unit2.pas';
となります。
相対パスでもうまくいくようですが、ライブラリパスが通っていない場合は絶対パスのほうがいいです。


C言語のヘッダのようにするならば、分割コンパイルしたOBJを、
{$L Unit2.OBJ}
のようにリンクして、
procedure proc1; external;
とすれば、Unit2.OBJのproc1を使うようになります。
こっちは、ヘルプで「external 宣言」を見てください。

編集 削除
らりばど  2002-03-27 17:48:51  No: 716  IP: [192.*.*.*]

すみません、偶然にも自己解決してしまいました。

まず「ユニット」として〜.pasファイルを作成しないと
ダメということに気付きました。

しかし開発画面から.pasファイルを作成、保存しても、
親ソースから要求される〜.dcuファイルが作成されない
のでいろいろ試行してみたところ、「プロジェクトに追
加」というメニューに気付きました。

1)プロジェクトに追加で〜.pasファイルを指定し親ソ
    ースに追加
2)親ソース毎コンパイル

で〜.dcuファイルを作成することができました。
あとは親ファイルから
> uses SysUtils, ユニット名;
と指定することで思っていた通りの動きをしてくれるよ
うになりました。

3日ほど悩んでいたのですが、もうちょっとの踏ん張り
&努力が足りなかったようです。
お騒がせ致しました。

編集 削除
らりばど  2002-03-27 17:51:15  No: 717  IP: [192.*.*.*]

>にしのさん

お世話になっております。
すみません、私の解決文を書いてる最中にレスつけていただいて
いたみたいです。
お手数をお掛けしました。

編集 削除