我目前正在将一些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);
};
Delphi的翻译是什么?
在哪里可以找到将C头手动转换为Delphi的好资源(包括指针,预处理器指令等)?
答案 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源代码进行比较。