在C#app中使用void *参数调用C ++函数

时间:2016-03-28 23:18:18

标签: c# c++ pointers void

我有一个c ++函数,如下所示:

int Compression::DecompressPacket(const void* inData, int inLength, void* outData, int outLength)
{
    int headerLength = ComputeDataHeaderLength(inData);
    return DecompressDataContent(static_cast<const unsigned char*>(inData) + headerLength, inLength - headerLength, outData, outLength);
}

该函数位于c ++库中的类中。

另一方面,我需要在我的c#应用程序上调用此函数。该函数要求我输入类型的参数:“void *,int,void *,int”。

当我尝试在不安全的函数中创建void *时,

unsafe private void lstbox_packets_SelectedIndexChanged(object sender, EventArgs e)
{
   [...]
   byte[] value = byteValuePackets[lstbox_packets.SelectedIndices[0]];    
   void* pValue = &value;
   [...]
}

我收到错误:

  

错误8无法获取地址,获取大小或声明指向托管类型的指针('byte []')

我对c ++和指针不是很熟悉,但我想如何在c#中传递void *类型?

1 个答案:

答案 0 :(得分:2)

您不应该使用value的地址,而且还必须使用fixed声明:

fixed (void* pValue = value)
{
    //...
}