2015-02-04 1 views
1

У меня есть код C, который я хочу использовать в моем приложении Windows Store C#. Не очень хорошо на C/C++, но может хлопать в нескольких строках, поэтому у меня есть проблема и вопрос. Одна из функций источника C выглядит следующим образом:Платформа :: Array <byte>^to char * - преобразование и память

send_data(const char *data, size_t len) 

Метод обертка для этого send_data метода C в ++/CX класса-оболочки C я пытаюсь написать имеет подпись:

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

И вот наступил вопросы:

  1. Как преобразовать платформу :: Array^в char *, чтобы я вызывал send_data? Нужно ли мне выделять память и добавлять NULL для завершения массива char *?
  2. Когда я передаю данные с C# в качестве байта [], нужно ли затем его закрепить в памяти, чтобы он не перемещался?
+1

Это не похоже на c или C++. Может ли это быть C++/cli? – user2079303

+0

Источник находится в C, и я пытаюсь получить часть CLI C++. Отредактированный вопрос для ясности – Kamen

+0

@Angew & Kamen Ах, мое плохое. – user2079303

ответ

-1

Таким образом, чтобы ответить на мой первый вопрос - Преобразование платформы :: Массив обугливаться * не было ничего труднее, чем:

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

Примечание, я использую CLI Visual C++ (Visual Studio 2013), так что _strdup является выбор там.

Что касается закрепления - увидим позже :)

+2

Это не CLI, это C++/CX, который разделяет много синтаксического сходства с C++/CLI. Как сказал Ханс выше, нет необходимости наводить что-либо на C++/CX, поскольку сбор мусора отсутствует. – robwirving

0

Нужно ли [...] добавить NULL для завершения массива char *?

Это зависит от того, что фактически выполняет функция C send_data(). Отправляет ли он 0 -терминатор? Если «Да», то вам нужно либо предоставить его, либо сделать реализацию вашего отправителя.