这是我的 C 函数:
DLL_PUBLIC void alve_ripemd320__finish(void* instance, uint32_t* out_hash)
{
...
for (uint32_t i=0, i_end=10; i<i_end; i++)
{
out_hash[i] = h[i];
}
}
这就是我从 C# 中调用它的方式:
[DllImport(PlatformConstants.DllName)]
static extern void alve_ripemd320__finish (IntPtr instance_space, ref byte[] hash);
...
public byte[] Finish()
{
byte[] result = new byte[40];
alve_ripemd320__finish (c_instance, ref result);
return result;
}
这会产生一个丑陋的 SEGFAULT,如果我评论上面写入 out_hash 的 C 代码,它就会消失......我的问题是,这是使用 PInvoke 传递字节缓冲区的正确方法吗?