如何通过StringBuilder声明的P/Invoke传递nullptr?

Bil*_*eal 2 c# pinvoke winapi

考虑一个典型的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客户希望的.传递nullptrpSid是容易的; 只是通过IntPtr.Zero.但是应该通过什么StringBuilder呢?

我不想传递空StringBuilder,因为我不希望这个调用失败ERROR_INSUFFICIENT_BUFFER.

Tho*_*que 7

你可以传递null这个参数; 它将被编组为空指针.