ошибка подключения внешнего модуля

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

ошибка подключения внешнего модуля

Сообщение sunjob » 13.04.2024 03:15:01

день добрый!

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


to_forum_01.tar.bz2


Добавлено спустя 10 минут 16 секунд:
00.png


Добавлено спустя 25 секунд:
01.png


Добавлено спустя 30 секунд:
02.png


Добавлено спустя 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.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
sunjob
постоялец
 
Сообщения: 156
Зарегистрирован: 12.01.2011 15:19:54

Re: ошибка подключения внешнего модуля

Сообщение Alex2013 » 13.04.2024 12:27:03

Неуверен что поможет ... но попробуй так. Убери вызов в модулей CustApp и parser из секции interface в основной программе и напиши так

Код: Выделить всё
implementation
uses parser;
Alex2013
долгожитель
 
Сообщения: 3049
Зарегистрирован: 03.04.2013 11:59:44

Re: ошибка подключения внешнего модуля

Сообщение sunjob » 13.04.2024 15:46:35

так все работает... есть еще один варинт (подсказали) - добавить один "общий" модуль (проверил оба варианта рабочие)
Аватара пользователя
sunjob
постоялец
 
Сообщения: 156
Зарегистрирован: 12.01.2011 15:19:54


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 21

Рейтинг@Mail.ru