考虑一个典型的 P/Invoke 声明,如下所示:
[DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool LookupAccountName(
string SystemName,
string accountName,
IntPtr pSid,
ref uint cbSid,
[MarshalAs(UnmanagedType.LPWStr)] StringBuilder ReferencedDomainName,
ref uint ReferencedDomainNameCount,
out SID_NAME_USE SIDUse);
LookupAccountName 的 MSDN 文档说明了这一点pSid
,如果客户愿意,ReferencedDomainName
也可能如此。nullptr
过关nullptr
很pSid
容易;只是通过IntPtr.Zero
。但是一个人应该通过什么来获得 a StringBuilder
?
我不想传递一个空的StringBuilder
,因为我不希望这个调用失败ERROR_INSUFFICIENT_BUFFER
。