におけるCのコールバックのための関数へのポインタを提供する:私は同等のDelphiのバージョンに、次のCヘッダを変換しようとしているデルファイ
/** 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;
問題は、2つの関数へのポインタを取得する方法を覚えていないので、私がこれらを間違って扱っていることを確信していることです。私の質問は:例えば、malloc関数をyajl_alloc_funcs.mallocに代入しようとすると、どのようにポインタを得ることができるのでしょうか?
また、私が翻訳で間違っていることをしている場合、ここでは「適切な」アプローチは何ですか?
更新:私は何を求めているのか混乱しているようです。私は、実際のメソッドを実装しているし、次のコードを使用して前述-貼り付けたレコードを使用してDLLにそれらを供給しようとしています: E2009互換性のないタイプ::私のエラーを与える
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;
..
「定期的な手順や方法をポインタ ' ヘッダーの翻訳で何か問題があったため、疑わしいと思われます。
ご協力いただければ幸いです。
*デルファイへ* C *からの変換*を?あなたはもっと良いロジックを書き直す... –
@ ring0 - 私はあなたのポイントを見ているのか分からない、どこで論理的な問題ですか? – jamiei
@ ring0あなたが質問を理解していない –