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

Ram*_*ish 2 c delphi


我正在将一些C头文件翻译成Delphi.
在这些头文件中,两个文件彼此共享它们的结构.
当我在Delphi中尝试这个时,它给了我循环引用错误.
所以我目前正在单个.pas文件中编写两个头文件的翻译.
有没有其他方法来解决这个问题?

这是一个小例子.
实际的头文件比较复杂:

== == File1.h

struct a
{
int data;
}
int compare(struct a,struct b);
Run Code Online (Sandbox Code Playgroud)

== == File2.h

struct b
{
int data;
}
int compare(struct A,struct b);
Run Code Online (Sandbox Code Playgroud)

== == File1.pas

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

compare = function(d1: a; d2: b): Integer; cdecl;
Run Code Online (Sandbox Code Playgroud)

== == File2.pas

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

compare = function(d1: a; d2: b): Integer; cdecl;
Run Code Online (Sandbox Code Playgroud)

jpf*_*ius 8

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

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

请注意,德尔福强迫您考虑循环引用的事实并不是一件坏事恕我直言.在许多情况下,这些循环引用会引起您注意设计中的缺陷.