Esistono alcune routine API che accettano un puntatore a una variabile come parametro convertito in parametri var, ma possono essere specificate come puntatori nil in base ai file della guida di Windows.Come passare nil a un parametro var?
A titolo di esempio, la funzione ChangeDisplaySettings è dichiarata come:
function ChangeDisplaySettings(var lpDevMode: TDeviceMode; dwFlags: DWORD): Longint; stdcall;
Ma il file della guida di Windows afferma chiaramente che "Passando NULL per il parametro LPDEVMODE è il modo più semplice per tornare alla modalità predefinita dopo una dinamica cambio di modalità. " La traduzione corretta avrebbe dovuto essere:
function ChangeDisplaySettings(lpDevMode: PDeviceMode; dwFlags: DWORD): Longint; stdcall;
sto postando questa domanda e risposta per aiutare i neofiti aggirare questi problemi, senza dover ri-dichiarare le funzioni. Ricordo ancora che all'inizio era un problema per me.
Riprovare la funzione è la soluzione corretta –
@David, Grazie; Rispetto la tua opinione come un veterano chiaramente esperto a Delfi.Personalmente, però, non mi piace avere ri-dichiarazioni di routine standard ovunque e preferisco usare quelle standard ovunque io sia. Aggiornerò comunque la mia risposta per indicare che la pratica standard sembra preferire una nuova dichiarazione. –
Ci dovrebbero essere due sovraccarichi. Uno con una var, e uno con un puntatore a struct. Quindi il chiamante può scegliere. –