2013-05-02 16 views
5

Esiste una cosa come nel titolo? Sto cercando di fare questo in parte di convertire an API structure, e imbattersi in qualcosa che non ho incontrato prima:Dichiarazioni di inoltro per i tipi di record

PFNReaderTranslatedDispatch = function(var msg: TMsg): BOOL; stdcall; 
PFNReaderScroll = function(var prmi: TReaderModeInfo; dx, dy: integer): BOOL; stdcall; 
TReaderModeInfo = record 
    cbSize: DWord; 
    hWnd: THandle; 
    fFlags: DWord; 
    prc: PRect; 
    pfnScroll: PFNReaderScroll; 
    fFlags2: PFNReaderTranslatedDispatch; 
    lParam: DWord; 
end; 
PReaderModeInfo = ^TReaderModeInfo; 

Chi conosce Delphi vedrà il problema evidente. Come faresti a lavorare su questo?

risposta

9

penso che questa è la soluzione più semplice:

PFNReaderTranslatedDispatch = function(var msg: TMsg): BOOL; stdcall; 
PReaderModeInfo = ^TReaderModeInfo; 
PFNReaderScroll = function(prmi: PReaderModeInfo; dx, dy: integer): BOOL; stdcall; 
TReaderModeInfo = record 
    cbSize: DWord; 
    hWnd: THandle; 
    fFlags: DWord; 
    prc: PRect; 
    pfnScroll: PFNReaderScroll; 
    fFlags2: PFNReaderTranslatedDispatch; 
    lParam: DWord; 
end; 

Infatti, è possibile reaplce chiaramente un parametro var da un parametro puntatore (per valore). E non ci sono problemi a dichiarare PReaderModeInfo prima del TReaderModeInfo.

+0

Grazie! Ora vai a implementare! – Glenn1234

+0

Questo è l'unico modo, ho cercato una soluzione anche per questo scenario esatto. E si applica solo se si intende utilizzare la versione del puntatore. –

+0

Solo una nota, dovrebbe essere possibile rendere 'prmi' un parametro' var' non tipizzato anche se è importante chiamare la funzione senza un puntatore esplicito. Ovviamente perdi la sicurezza del tipo, motivo per cui non lo farei io stesso, ma altri potrebbero, quindi assicurandoti che sia menzionato qui. – hvd

Problemi correlati