Возможны ли ссылки на циклические единицы в списке использования в delphi? - PullRequest
2 голосов
/ 20 января 2011


Я перевожу некоторые заголовочные файлы C в Delphi.
В этих заголовочных файлах два файла делятся друг с другом своей структурой.
Когда я попробовал это в Delphi, это дало мне ошибку циклической ссылки.
Итак, я сейчас пишу перевод обоих заголовков в одном файле .pas.
Есть ли другой способ обойти эту проблему?

Это небольшой пример.
Фактические файлы заголовковболее сложные: \

== File1.h ==

struct a
{
int data;
}
int compare(struct a,struct b);

== File2.h ==

struct b
{
int data;
}
int compare(struct A,struct b);

== File1.pas ==

uses File2;
type
  a = packed record
    data: Integer;
  end;

compare = function(d1: a; d2: b): Integer; cdecl;

== File2.pas ==

uses File1;
type
  b = packed record
    data: Integer;
  end;

compare = function(d1: a; d2: b): Integer; cdecl;

Ответы [ 2 ]

8 голосов
/ 20 января 2011

Как указывает Евгений, ссылки на круглые интерфейсные блоки в Delphi невозможны.Существует несколько возможных решений:

  • Переместите разделяемую структуру в третье подразделение и разрешите двум другим подразделениям включить это подразделение.
  • Переместите одну из ссылок на обозначение implementation section (если это возможно).
  • Храните все в одном файле, как вы упомянули

Обратите внимание, что тот факт, что Delphi заставляет вас думать о циклических ссылках, не является плохой вещьюПО МОЕМУ МНЕНИЮ.Во многих случаях эти циклические ссылки привлекают ваше внимание к недостатку вашего дизайна.

2 голосов
/ 20 января 2011

Да, вы не можете заставить единицы ссылаться друг на друга в разделе «интерфейс».Переместить «использует» предложение одного файла в раздел реализации.Это ограничение паскаля.

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