Доступ к другой единице константы в Delphi - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть простой проект в Delphi:

program Project1;

uses
  Forms,
  Unit2 in 'Unit2.pas',
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Unit1:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

function encodeData(var Data:array of Byte; var Size: Integer): Integer;
var
  i: Intger
begin
  ...
  for i := 1 to Size do
  begin
    Data[i] := Data[i] + unit2.SomeArray[i]
  end;
  ...
  Result := 0;
  Exit;
  end
...

Второй блок:

unit Unit2;

interface

implementation

const
  SomeArray:Array [0..65000] of LongWord = (
  ...
  );

end.

Когда я пытаюсьпостроить этот проект, я получаю такие ошибки:

[Error] Unit1.pas (41): необъявленный идентификатор: 'SomeArray'

Что не так с этим кодом?Я проверил Delphi wiki и другие вопросы и не нашел решения для этой проблемы ...

1 Ответ

0 голосов
/ 22 сентября 2018

Вам необходимо определить SomeArray в секции interface устройства.В настоящее время он есть в разделе implementation, который специально скрыт от других подразделений.Только вещи, определенные / объявленные в interface, видны другим единицам.

В документации, которую вы связали, описано:

Раздел реализации модуля начинается с реализации зарезервированного слова и продолжается до начала раздела инициализации или, если естьнет раздела инициализации, до конца блока.Раздел реализации определяет процедуры и функции, которые объявлены в разделе интерфейса.В разделе реализации эти процедуры и функции могут быть определены и вызваны в любом порядке.Вы можете опустить списки параметров из открытых заголовков процедур и функций, когда определяете их в разделе реализации;но если вы включаете список параметров, он должен точно соответствовать объявлению в разделе интерфейса.

В дополнение к определениям открытых процедур и функций, раздел реализации может объявлять константы, типы (включая классы), переменные,процедуры и функции , которые являются частными для устройства.То есть, в отличие от раздела интерфейса, объекты, объявленные в разделе реализации, недоступны для других модулей.

(выделение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...