Qual è la differenza tra le seguenti annotazioni SAL?Qual è la differenza tra __deref_out_opt e __deref_opt_out?
void foo(__deref_out_opt PSTR* bar);
void foo(__deref_opt_out PSTR* bar);
Qual è la differenza tra le seguenti annotazioni SAL?Qual è la differenza tra __deref_out_opt e __deref_opt_out?
void foo(__deref_out_opt PSTR* bar);
void foo(__deref_opt_out PSTR* bar);
Un parametro PSTR*
fuori significa il chiamante passa in un buffer che riceve un puntatore a una stringa.
In __deref_out_opt, la stringa è opzionale (funzione mette NULL nel buffer del chiamante fornito).
In __deref_opt_out, il buffer è facoltativa (il chiamante passa NULL per indicare disinteresse il valore di uscita).
Presumibilmente, è possibile combinare questi concetti, ci dovrebbe essere un modificatore __deref_opt_out_opt
per quello.
Dove inserisco _opt per "l'altro caso" in cui la funzione può impostare il parametro di uscita su NULL? – John
Dopo "out", come in "__deref_out_opt". La documentazione SAL descrive il caso di '__deref_opt' in particolare, e in questo caso il buffer potrebbe non esistere. Volete che il buffer esista, quindi semplice '__deref', ma il puntatore memorizzato in esso può essere NULL, quindi' _out_opt'. –