考虑一个典型的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);
Run Code Online (Sandbox Code Playgroud)
LookupAccountName的MSDN文档说明了这一点,pSid并且ReferencedDomainName可能是nullptr客户希望的.传递nullptr的pSid是容易的; 只是通过IntPtr.Zero.但是应该通过什么StringBuilder呢?
我不想传递空StringBuilder,因为我不希望这个调用失败ERROR_INSUFFICIENT_BUFFER.