用户列表中的循环单元引用是否可以在delphi中进行?

时间:2011-01-20 06:22:47

标签: c delphi


我正在将一些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 个答案:

答案 0 :(得分:8)

正如Eugene所指出的,圆形接口单元引用在Delphi中是不可能的。有几种可能的解决方案:

  • 将共享结构移动到第三个单元,让其他两个单元包含此单元。
  • 将其中一个单位引用移至implementation部分(如果可能)。
  • 如您所述,将所有内容保存在一个文件中

请注意,德尔福强迫您考虑循环引用这一事实并非蠢事。在许多情况下,这些循环引用会引起您注意设计中的缺陷。

答案 1 :(得分:2)

是的,你不能让单位在“界面”部分互相引用。将一个文件的“uses”子句移动到实现部分。这是pascal的限制。