Platform::Array<byte>^ to char* - 转换和记忆

Platform::Array<byte>^ to char* - conversion and memory

我有一个 C 代码,我想在我的 Windows Store C# 应用程序中使用。不太擅长 C/C++ 但可以在几行中猛击,所以我有一个问题和一个问题。 C 源函数之一如下所示:

send_data(const char *data, size_t len)

我尝试编写的 C++/CX 包装器 class 中此 send_data C 方法的包装器方法具有以下签名:

WrapperClass::send_data(const Platform::Array<byte>^ buff)

问题来了:

  1. 如何将 Platform::Array^ 转换为 char* 以便调用 send_data?是否需要分配内存加NULL终止char*数组?
  2. 当我将 C# 中的数据作为 byte[] 传递时,是否需要将其固定在内存中以使其不被移动?

Do I need to [...] add NULL to terminate the char* array?

这取决于 C send_data() 函数实际发送的内容。它会发送 0 终结符吗?如果 "Yes",那么您要么需要提供它,要么让您的发件人的实现附加它。

所以,要回答我的第一个问题——将 Platform::Array 转换为 char* 并不比以下更难:

const char* data = _strdup((const char*)data->Data);

注意,我使用的是 Visual C++ CLI (Visual Studio 2013),所以 _strdup 是那里的选择。

至于固定 - 稍后会看到:)