C API 関数が出力を割り当てること、またはユーザーに出力バッファーを指定させることは良い考えですか? 例えば:
BOOL GetString(
PWSTR *String
);
...
PWSTR string;
GetString(&string);
Free(string);
対
BOOL GetString(
PWSTR Buffer,
ULONG BufferSize,
PULONG RequiredBufferSize
);
...
// A lot more code than in the first case
より具体的には、Win32 API が主に 2 番目のケース (たとえば、 GetWindowText、LookupAccountSid ) を使用する理由が気になります。API 関数が出力の大きさを知っている場合、なぜユーザーは出力サイズを推測しようとするのでしょうか? 2番目のケースが使用される理由に関する情報が見つかりません。
また、LookupAccountSid の例は特に悪いです。内部的には、呼び出し元に出力を割り当てる LSA API を使用します。次に、LookupAccountSid は、LSA から出力を返すことができる場合に、ユーザーにバッファーを割り当てます (そして、正しいバッファー サイズを推測します)。なんで?