在 C# 应用程序中调用带有 void* 参数的 C++ 函数
Calling a C++ function with void* parameter in a C# app
我有一个如下所示的 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);
}
该函数位于 class 中,它位于 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;
[...]
}
我收到错误:
Error 8 Cannot take the address of, get the size of, or declare a pointer to a managed type ('byte[]')
我不是很熟悉 C++ 和指针,但我应该如何在 C# 中传递 void* 类型?
你不应该取value
的地址,而且你必须使用fixed
语句:
fixed (void* pValue = value)
{
//...
}
我有一个如下所示的 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);
}
该函数位于 class 中,它位于 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;
[...]
}
我收到错误:
Error 8 Cannot take the address of, get the size of, or declare a pointer to a managed type ('byte[]')
我不是很熟悉 C++ 和指针,但我应该如何在 C# 中传递 void* 类型?
你不应该取value
的地址,而且你必须使用fixed
语句:
fixed (void* pValue = value)
{
//...
}