我想从C#程序中调用AuditEnumerateCategories函数,为此我声明了如下外部函数:
[DllImport("advapi32.dll", SetLastError = true)]
private static extern bool AuditEnumerateCategories(
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] out Guid[] auditCategories,
out uint numCategories);
然后我可以在代码中将其用作:
if (AuditEnumerateCategories(out Guid[] categories, out uint dummySize))
{
...
}
这很好用,但是随后我在docs中注意到了有关作为第一个参数返回的数组的以下内容:
使用完此缓冲区后,通过调用AuditFree函数将其释放。
是否有一种方法可以从我可以用来调用AuditFree
函数的IntPtr
变量中提取一个categories
?还是我应该宣布AuditEnumerateCategories
返回IntPtr
并自己对Guid[]
进行编组?
答案 0 :(得分:3)
该框架不会自动为您执行此操作。您需要将参数声明为IntPtr并手动进行所有封送处理。