Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过使用StringBuilder声明的P/Invoke传递nullptr?_C#_Winapi_Pinvoke - Fatal编程技术网

C# 如何通过使用StringBuilder声明的P/Invoke传递nullptr?

C# 如何通过使用StringBuilder声明的P/Invoke传递nullptr?,c#,winapi,pinvoke,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

考虑这样一个典型的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);
表示如果客户愿意,
pSid
ReferenceDomainName
可以是
nullptr
。为
pSid
传递
nullptr
很容易;只需通过
IntPtr.Zero
。但是对于
StringBuilder
,应该传递什么呢


我不想传递一个空的
StringBuilder
,因为我不想让这个调用失败,因为
错误\u缓冲区不足

您可以传递这个参数的
null
;它将被封送为空指针。

@pm100:这将失败,因为
IntPtr
无法转换为
StringBuilder
。然后声明第二个导入,该导入将接受inptrplace@pm100我不能那样做。(其他代码目前使用此调用,我不想在任何地方都进行修复)其他答案很好。但仅供参考,您可以为同一个函数创建第二个dllimport,但名称不同,这样您就可以修改参数定义(EntryPoint=xxx)@pm100:这似乎是一次大规模的黑客攻击:)