如何在 C# 中将指针传递给字节数组的指针

How pass a pointer to a pointer of byte array in C#

我必须从 C# 应用程序调用 C 函数(从 DLL)声明为:

void fillBuffer( uint8_t ** pData, uint32_t * size );

此函数检查 pData 是否不为空,以防它用一些奇特的数据填充缓冲区。变量 size 用作输入参数以限制将写入 pData 的字节数,并用作输出参数以告知实际写入了多少字节。

如果 pData 为 null,它将自己分配缓冲区,并将 return in size 分配的字节数。

如何在场景(传递已分配的缓冲区或让它分配对我来说)?

您不能在没有不安全上下文的情况下调用 C 函数。这根本不可能。除非声明如此,否则不能在托管上下文中使用不安全指针。

我想我用这个解决方案解决了:

...
UInt32 len;
IntPtr ppData = IntPtr.Zero;

fillBuffer( ref ppData, out len );
...

并声明函数如下:

 [DllImport( "mylib.dll", CallingConvention = CallingConvention.Cdecl )]
 static extern void fillBuffer( ref IntPtr ppData,out UInt32 size );

谢谢