C++ Так что я передаю массив, который я создал в C# в функцию:Переходя # целочисленный массив C в
options = new int[3];
options[0] = 3;
options[1] = 5;
options[2] = 4;
formatvalue(options);// the function header is: formatvalue(object options)
Отсюда он проходит через несколько интерфейсов и в конечном итоге заканчивается в проекте C++.
В C++ заголовок функции выглядит примерно так: formatvalue(System::Object^ value)
В функции C++, я просто хочу, чтобы прочитать данные. Вся точка передачи в массиве такова, что мне не нужно иметь множество различных аргументов для функции. Это заняло некоторое время, чтобы понять, что передача чего-либо, кроме переменной, дала мне очень странные значения. Сначала я попытался передать ему структуру ints, но бросать System :: Object во что-либо во время компиляции было сложно. И в конце концов я закончил с этим битом C++ кода, вид работ:
int* test;
memcpy(&test, &value, sizeof(value));
int x;
for (int i = 0; i < 16; i++)
{
x = *(test + i);
}
Что странно, хотя, когда я разыменовать тест, он дает мне некоторые странные мусор, то есть, пока я не получу до * (тест + 4), где начинается мой массив: D. Вот как выглядит память, как:
f8 ае 0b c2 Fe 7f 00 00 03 00 00 00 00 (массив начинается здесь) 00 00 00 03 00 00 00 05 00 00 00 04
Я думал, что тест-адрес указывал на то, что он был первым значением в массиве, вместо этого у меня есть 13 байт мусора, прежде чем мой массив начнется. Кто-то говорил мне, что эти 13 байтов могут быть dope vector? Это будет иметь смысл, так как длина моего массива равна 3, и в первых 13 байтах есть случайное 3 сидения.
Итак вопросы:
- Почему адрес теста не начало массива?
- Является ли первый 13 байтов вектором допинга?
- Правильно ли я использую указатели/memcpy?
Редактировать 1: Изменен первый вопрос.
номер 3 не вопрос вообще –
Seen http://stackoverflow.com/questions/21822882/marshalling-complex-structures-between-c-c? –
@MatiasCicero То же самое для 1. –