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

时间:2013-03-05 23:46:48

标签: c# winapi pinvoke

考虑一个典型的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);

MSDN documentation for LookupAccountName表示如果客户愿意,pSidReferencedDomainName可能是nullptr。为nullptr传递pSid很容易;只需通过IntPtr.Zero。但是应该为StringBuilder传递什么?

我不想传递空StringBuilder,因为我不希望此调用因ERROR_INSUFFICIENT_BUFFER而失败。

1 个答案:

答案 0 :(得分:7)

您可以为此参数传递null;它将被编组为空指针。