如何通过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文档说,如果客户愿意,pSid
和ReferencedDomainName
可以是nullptr
。通过nullptr
代替pSid
比较容易;只要通过IntPtr.Zero
。但是我们应该把什么当作StringBuilder
呢?
我不想传递一个空的StringBuilder
,因为我不希望这个调用失败与ERROR_INSUFFICIENT_BUFFER
。
您可以将null
传递给该参数;它将被封送为空指针。