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)
问题来了:
- 如何将 Platform::Array^ 转换为 char* 以便调用 send_data?是否需要分配内存加NULL终止char*数组?
- 当我将 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 是那里的选择。
至于固定 - 稍后会看到:)
我有一个 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)
问题来了:
- 如何将 Platform::Array^ 转换为 char* 以便调用 send_data?是否需要分配内存加NULL终止char*数组?
- 当我将 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 是那里的选择。
至于固定 - 稍后会看到:)