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