次のような典型的な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です。しかし、1つは何を渡す必要がありStringBuilderますか?
StringBuilderこの呼び出しがで失敗したくないので、空を渡したくありませんERROR_INSUFFICIENT_BUFFER。