исходные данные:
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.