次のような典型的な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
。