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 主要使用第二种情况(例如GetWindowText、LookupAccountSid)。如果一个 API 函数知道输出有多大,为什么用户要尝试猜测输出大小?我找不到任何关于为什么要使用第二种情况的信息。
另外: LookupAccountSid 示例特别糟糕。它在内部使用 LSA API,为调用者分配输出。然后 LookupAccountSid 让用户分配一个缓冲区(并猜测正确的缓冲区大小),它可以只返回 LSA 的输出!为什么?