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

问题描述 投票:0回答:2

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

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

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

如果pData为null,它将自己分配缓冲区并在size中返回分配的字节数。

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

c# c marshalling dllimport
2个回答
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 );

谢谢


-2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.