如何在 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 );
谢谢
我必须从 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 );
谢谢