我必须从C#应用程序调用一个C函数(来自DLL)声明为:
void fillBuffer( uint8_t ** pData, uint32_t * size );
此函数检查pData
是否为空,以防它用一些奇特的数据填充缓冲区。变量size
用作输入参数来限制将在pData
中写入的字节数,并用作输出参数以通知实际写入了多少字节。
如果pData
为null,它将自己分配缓冲区并在size
中返回分配的字节数。
如何在两种情况下从C#应用程序声明并调用此函数(如果可能的话,避免使用unsafe
)(传递已分配的缓冲区或让它为我分配)?
我想我解决了使用这个解决方案:
...
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函数。这根本不可能。除非您声明,否则您无法在托管上下文中使用不安全的指针。