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

时间:2019-02-23 11:55:19

标签: c# c marshalling dllimport

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

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

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

如果pData为空,它将分配缓冲区本身,并size中返回已分配的字节数。

在两种情况下(如何传递已经分配的缓冲区或让它为我分配),如何从C#应用程序中声明和调用此函数(如果可能,避免使用unsafe)? / p>

2 个答案:

答案 0 :(得分:0)

我想我使用此解决方案解决了

...
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 );

谢谢

答案 1 :(得分:-2)

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