C函数指针转换成Delphi / Pascal?

时间:2011-01-20 10:00:31

标签: c delphi pointers function-pointers pascal

我目前正在将一些C标头翻译成Delphi。我找不到将函数指针从C转换为Delphi的引用。

typedef _JAlloc JAlloc;  
struct _JAlloc {  
    void *(*alloc) (JAlloc *allocator, size_t size);  
    void (*free) (JAlloc *allocator, void *p);  
    void *(*realloc) (JAlloc *allocator, void *p, size_t size);  
};
  1. Delphi的翻译是什么?

  2. 在哪里可以找到将C头手动转换为Delphi的好资源(包括指针,预处理器指令等)?

2 个答案:

答案 0 :(得分:8)

使用此类代码

type
  PJAlloc = ^TJAlloc;
  TJAllocAlloc = function(allocator: PJAlloc; size: integer): pointer; cdecl;
  TJAllocFree = procedure(allocator: PJAlloc; p: pointer); cdecl;
  TJAllocRealloc = function(allocator: PJAlloc; p: pointer; size: integer); cdecl;
  TJAlloc = record
    alloc: ^TJAllocAlloc;
    free: ^TJAllocFree;
    realloc: ^TJAllocRealloc;
  end;

将cdecl更改为stdcall,具体取决于C库的调用约定。

另一种宣言(或许更多'pascalish')可能是:

type
  TJAllocAlloc = function(var allocator: TJAlloc; size: integer): pointer; cdecl;
  TJAllocFree = procedure(var allocator: TJAlloc; p: pointer); cdecl;
  TJAllocRealloc = function(var allocator: TJAlloc; p: pointer; size: integer); cdecl;
  TJAlloc = record
    alloc: ^TJAllocAlloc;
    free: ^TJAllocFree;
    realloc: ^TJAllocRealloc;
  end;

答案 1 :(得分:1)

博士。 Bob的HeadConv实用程序是一个很好的用于将C声明转换为Delphi的实用程序,是一个很好的学习工具,用于将C源代码与等效的Pascal源代码进行比较。

You can find it here