如何解组指向稍后应释放的数组的指针?
How to unmarshal a pointer to an array that should later be freed?
我想从 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 中关于作为第一个参数返回的数组的以下内容:
When you have finished using this buffer, free it by calling the AuditFree function.
有没有办法从我可以用来调用 AuditFree
函数的 categories
变量中获取 IntPtr
?或者我应该声明 AuditEnumerateCategories
返回一个 IntPtr
并自己编组到 Guid[]
吗?
框架不会自动为您执行此操作。您需要将参数声明为 IntPtr 并手动执行所有封送处理。
我想从 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 中关于作为第一个参数返回的数组的以下内容:
When you have finished using this buffer, free it by calling the AuditFree function.
有没有办法从我可以用来调用 AuditFree
函数的 categories
变量中获取 IntPtr
?或者我应该声明 AuditEnumerateCategories
返回一个 IntPtr
并自己编组到 Guid[]
吗?
框架不会自动为您执行此操作。您需要将参数声明为 IntPtr 并手动执行所有封送处理。