将C标题转换为Delphi-不透明数据类型

将C标题转换为Delphi-不透明数据类型,delphi,delphi-10.1-berlin,Delphi,Delphi 10.1 Berlin,在转换过程中,我遇到了以下C代码: /** Opaque data type for the error object. */ typedef struct kError * KErrorRef; 科罗尔在哪里 由Rudy Velthuis提供的生成以下代码: type {$EXTERNALSYM KErrorRef} KErrorRef = ^kError; 当我尝试编译它时,会收到以下错误消息: [dcc32 Error] ukError.pas(50): E2003 Undec

在转换过程中,我遇到了以下C代码:

/** Opaque data type for the error object.
*/
typedef struct kError * KErrorRef;
科罗尔在哪里

由Rudy Velthuis提供的生成以下代码:

type
  {$EXTERNALSYM KErrorRef}
  KErrorRef = ^kError;
当我尝试编译它时,会收到以下错误消息:

[dcc32 Error] ukError.pas(50): E2003 Undeclared identifier: 'kError'

转换C代码的合适方法是什么?

我会声明一个空记录,然后声明一个指向它的指针。这给了你打字的安全性

type
  KErrorRef = ^kError;
  kError = record
  end;

我会声明一个空记录,然后声明一个指向它的指针。这给了你打字的安全性

type
  KErrorRef = ^kError;
  kError = record
  end;
科罗尔在哪里

没有,因为它实际上并不需要

在本宣言中:

类型定义结构kError*KErrorRef; 结构kError是不完整的类型,与指针一起使用时允许使用

该声明大致相当于:

//某些未知结构类型的转发声明 结构克尔; //这没关系;编译器知道指针的大小,而指针的大小不是 //受指向的实际结构的大小影响 typedef kError*KErrorRef; Rudy Velthuis提供的转换工具生成此代码

该工具在此实例中未生成正确的Delphi代码。当处理不完整的正向声明的结构类型的typedef时,如果以后没有声明实际的结构类型,它应该生成类似于以下内容的Delphi代码:

类型 {$EXTERNALSYM KErrorRef} KErrorRef=^kError; {$NODEFINE kError} 克尔=记录 终止 科罗尔在哪里

没有,因为它实际上并不需要

在本宣言中:

类型定义结构kError*KErrorRef; 结构kError是不完整的类型,与指针一起使用时允许使用

该声明大致相当于:

//某些未知结构类型的转发声明 结构克尔; //这没关系;编译器知道指针的大小,而指针的大小不是 //受指向的实际结构的大小影响 typedef kError*KErrorRef; Rudy Velthuis提供的转换工具生成此代码

该工具在此实例中未生成正确的Delphi代码。当处理不完整的正向声明的结构类型的typedef时,如果以后没有声明实际的结构类型,它应该生成类似于以下内容的Delphi代码:

类型 {$EXTERNALSYM KErrorRef} KErrorRef=^kError; {$NODEFINE kError} 克尔=记录 终止
我将它声明为kError=type指针@Victoria你可能希望这样做,但它的任务与指针兼容这是一个陷阱。该类型不存在。对于C来说,这不是问题,它只需要知道KErrorRef是指针。所以在Delphi中将其声明为指针。我的转换工具不知道是否在任何地方定义了这样的类型,所以它只是按原样进行转换。@RudyVelthuis我意识到它就是其中之一,只是不知道如何处理它。感谢这些工具,它为我节省了很多打字和查找类型转换的时间。正如我所写的,我所有的转换都是手动完成的,但需要专家的帮助。确实节省了很多时间,但需要一些手动干预。它不像那些试图做任何事情的头转换工具@Victoria你可能希望这样做,但它的任务与指针兼容这是一个陷阱。该类型不存在。对于C来说,这不是问题,它只需要知道KErrorRef是指针。所以在Delphi中将其声明为指针。我的转换工具不知道是否在任何地方定义了这样的类型,所以它只是按原样进行转换。@RudyVelthuis我意识到它就是其中之一,只是不知道如何处理它。感谢这些工具,它为我节省了很多打字和查找类型转换的时间。正如我所写的,我所有的转换都是手动完成的,但需要专家的帮助。确实节省了很多时间,但需要一些手动干预。它不像那些试图做任何事情的标题转换工具。FWIW,我的文档说:它们不会处理每一个构造,但会处理大多数构造,只剩下少数项目需要手动转换。这是需要手动转换的项目之一。FWIW,我的文档说:它们不会处理每一个构造,但会处理大多数构造,只剩下少数项目需要手动转换。这是要手动转换的项目之一。空记录仍然很酷。据我所知,它们是唯一一种大小为0的类型。我有时使用它们作为标签,在记录的末尾指示可变大小数组的开始。比数组[0..0]好多了。空记录还是很酷的。据我所知,它们是唯一一种大小为0的类型。我有时使用它们作为标签,在记录的末尾指示可变大小数组的开始。比什么东西的数组[0..0]好多了。