исходные данные:
prj1.lpr - lazarus cli-приложение
parser.pas - внешний модуль
fpc-3.2.2 & lazarus 2.2.6/3.2.0 (не влияют на ошибку)
в модуле предполагается использовать функции парсера арг.ком.строки
подключается
- Код: Выделить всё
- uses CustApp
пока функции не вызываются (пустой модуль) - сборка без ошибок
на вызов функции выдается
- Код: Выделить всё
- hasOption('h', 'help');
 -->
 parser.pas(16,1) Error: Identifier not found "hasOption"
при вызове в главном модуле - без проблем
содержимое файлов проекта и модуля
prj1.lpr
- Код: Выделить всё
- program prj1;
 {$mode objfpc}{$H+}
 uses
 {$IFDEF UNIX}
 cthreads,
 {$ENDIF}
 Classes, SysUtils, CustApp, LazFileUtils, parser;
 type
 app = class(TCustomApplication)
 protected
 procedure DoRun; override;
 public
 constructor Create(TheOwner : TComponent); override;
 destructor Destroy; override;
 end;
 
 procedure app.DoRun;
 begin
 hasOption('h', 'help'); // uses CustApp
 Terminate;
 end;
 constructor app.Create(TheOwner : TComponent);
 begin
 inherited Create(TheOwner);
 StopOnException := True;
 end;
 destructor app.Destroy;
 begin
 inherited Destroy;
 end;
 var Application : app;
 {$R *.res}
 begin
 Application := app.Create(nil);
 Application.Title := 'app';
 Application.Run;
 Application.Free;
 end.
parser.pas
- Код: Выделить всё
- unit parser;
 interface
 {$mode objfpc}{$H+}
 uses
 {$IFDEF UNIX}
 cthreads,
 {$ENDIF}
 Classes, SysUtils, CustApp;
 procedure proc;
 implementation
 procedure proc;
 begin
 //hasOption('h', 'help'); // uses CustApp
 end;
 initialization
 finalization
 end.
Добавлено спустя 10 минут 16 секунд:
Добавлено спустя 25 секунд:
Добавлено спустя 30 секунд:
Добавлено спустя 3 часа 16 минут 32 секунды:
пендиль под сраку
- Код: Выделить всё
- TCustomApplication : Hasoption()
на сколько правильна будет след. реализация?
prj
- Код: Выделить всё
- program prj1;
 {$mode objfpc}{$H+}
 uses
 {$IFDEF UNIX}
 cthreads,
 {$ENDIF}
 Classes, SysUtils, CustApp, LazFileUtils, parser;
 type
 app = class(TCustomApplication)
 protected
 procedure DoRun; override;
 public
 constructor Create(TheOwner : TComponent); override;
 destructor Destroy; override;
 end;
 var Application : app;
 procedure app.DoRun;
 begin
 parser.init(Application);
 parser.proc;
 Terminate;
 end;
 constructor app.Create(TheOwner : TComponent);
 begin
 inherited Create(TheOwner);
 StopOnException := True;
 end;
 destructor app.Destroy;
 begin
 inherited Destroy;
 end;
 //var Application : app;
 {$R *.res}
 begin
 Application := app.Create(nil);
 Application.Title := 'app';
 Application.Run;
 Application.Free;
 end.
module
- Код: Выделить всё
- unit parser;
 interface
 {$mode objfpc}{$H+}
 uses
 {$IFDEF UNIX}
 cthreads,
 {$ENDIF}
 Classes, SysUtils, CustApp;
 procedure init(p:TCustomApplication);
 procedure proc;
 implementation
 var
 app:TCustomApplication;
 procedure init(p:TCustomApplication);
 begin
 app := p;
 end;
 procedure proc;
 begin
 if(app.hasOption('h', 'help')) then // uses CustApp
 writeln('yes')
 else
 writeln('no');
 end;
 initialization
 finalization
 end.



