喫茶XRAYトップページ

[スレッド全体
]

[7693] コンポーネントを実行時に生成する場合は返信 削除
2014/7/3 (木) 23:36:12 Mr.XRAY
> このように,コンポーネントをフォームに配置すると,自動的に,
> 必要なユニット名が追加される仕組みになっています.


コンポーネントを実行時に生成する場合,動的に生成する,とも言いますが,
その場合は,自動では uses 部に必要なユニット名は追加されません.
次のコードは,以下のコンパイルエラーとなります.

[DCC エラー] Unit1.pas(28): E2003 未定義の識別子 : 'TIdHTTP'


procedure TForm1.Button1Click(Sender: TObject);
var
  HTTP : TIdHTTP;
begin
  HTTP := TIdHTTP.Create(Self);
  try
    //何かの処理
  finally
    FreeAndNil(HTTP);
  end;
end;

実行時に生成する場合でも,
もし,フォームに TIdHTTP コンパが配置してあれば,エラーとはなりません.


[7694] ファイルが見つかりませんと未定義のエラー返信 削除
2014/7/4 (金) 12:55:05 Mr.XRAY
Delphi XE で新規にプロジェクトを作成すると,ユニットの uses 部は
次のようになっています.
これらはユニット名と呼ばれています.ファイル名から,
拡張子 .pas あるいは .dcu を除いたものです.

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;


また,プロジェクトのよって,[プロジェクトの追加]で,プロジェクト
にファイルを追加することがあります.
 
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  VCLImageUtils in '..\VCLImageUtils.pas';  //ここ

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
 
コンパイル時に,Delphi は,パスの通ったフォルダから,これらの
ファイルを探します.
もし,ファイルがないと,「ファイルが見つかりません」という
エラーとなります.

未定義のエラーは,これらのファイル内に該当する関数等がない場合に
発生することになります.

uses 部に書いてあるユニット内でも当然 uses 部があります.
そのユニットの uses 部のユニット(ファイル)も探すわけです.
そして,該当ファイルがなければ,やはり,ファイルが見つかりません.
ということになります.
未定義のエラーも現象は同じです.


[7695] Re:ファイルが見つかりませんと未定義のエラー返信 削除
2014/7/4 (金) 16:01:54 Mr.XRAY
> 未定義のエラーも現象は同じです.

たとえ,uses 部やプロジェクトのソースコードで指定したファイル内にあっても,
未定義のエラーは,コンポーネント(つまり,クラスです)内のアクセスできない
位置にあると未定義になります.

それは,例えば,interface 部の Protected 部や Private 部にある場合です.
implementation 部にはアクセスできません.


[7703] Re2:ファイルが見つかりませんと未定義のエラー返信 削除
2014/7/8 (火) 11:44:34 Mr.XRAY
また,同じバターンか...


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82