Я пытаюсь преобразовать следующие заголовки C в эквивалентные версии Delphi:
/** pointer to a malloc function, supporting client overriding memory
* allocation routines */
typedef void * (*yajl_malloc_func)(void *ctx, unsigned int sz);
/** pointer to a free function, supporting client overriding memory
* allocation routines */
typedef void (*yajl_free_func)(void *ctx, void * ptr);
/** pointer to a realloc function which can resize an allocation. */
typedef void * (*yajl_realloc_func)(void *ctx, void * ptr, unsigned int sz);
typedef struct
{
/** pointer to a function that can allocate uninitialized memory */
yajl_malloc_func malloc;
/** pointer to a function that can resize memory allocations */
yajl_realloc_func realloc;
/** pointer to a function that can free memory allocated using
* reallocFunction or mallocFunction */
yajl_free_func free;
/** a context pointer that will be passed to above allocation routines */
void * ctx;
} yajl_alloc_funcs;
Мой код Delphi на данный момент выглядит следующим образом:
Tyajl_malloc_func = function(context: pointer; sizeOf: Cardinal): Pointer of Object; cdecl;
Tyajl_free_func = procedure(context: pointer; ptr: Pointer) of Object; cdecl;
Tyajl_realloc_func = function(context: pointer; ptr: Pointer; sizeOf: cardinal): Pointer of Object; cdecl;
yajl_alloc_funcs = record
malloc: Tyajl_malloc_func;
free: Tyajl_free_func;
realloc: Tyajl_realloc_func;
ctx: pointer;
end;
Проблема в том, чтоЯ почти уверен, что отношусь к ним неправильно, так как не могу вспомнить, как получить указатель на две функции.У меня вопрос: как я могу получить указатель на функцию malloc, когда я пытаюсь присвоить ее, например, yajl_alloc_funcs.malloc?
В качестве альтернативы, если я делаю что-то очень неправильное в своем переводе,«правильный» подход здесь?
Обновление: Кажется, есть некоторая путаница по поводу того, что я спрашиваю.Я реализовал реальные методы и пытаюсь передать их в DLL, используя ранее вставленную запись, используя следующий код:
var
alloc_funcs: yajl_alloc_funcs;
begin
FillChar(alloc_funcs, SizeOf(alloc_funcs), #0);
alloc_funcs.malloc := yajl_malloc;
alloc_funcs.free := yajl_free;
alloc_funcs.realloc := yajl_realloc;
..
, который выдает ошибку: E2009 Несовместимые типы: 'обычныйуказатель на процедуру и метод '' 1017 * Что я подозреваю, потому что я сделал что-то не так в своем переводе заголовка.
Любая помощь будет принята с благодарностью.