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

本文关键字:Invoke 传递 nullptr 何通过 StringBuilder 声明 | 更新日期: 2023-09-27 18:02:20

考虑这样一个典型的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文档说,如果客户愿意,pSidReferencedDomainName可以是nullptr。通过nullptr代替pSid比较容易;只要通过IntPtr.Zero。但是我们应该把什么当作StringBuilder呢?

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

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

您可以将null传递给该参数;它将被封送为空指针。