.net — Visual Studio C / C ++ struct char проблема

Я пытаюсь связать некоторый код C / C ++ из C # через DLL. Я не беглый программист на C / C ++, но все время использую C #. Я сейчас пытаюсь разобраться с этими типами C / C ++:

#ifndef struct_emxArray_char_T_1024
#define struct_emxArray_char_T_1024
struct emxArray_char_T_1024
{
char_T data[1024];
int32_T size[1];
};

#ifndef typedef_e_struct_T
#define typedef_e_struct_T
typedef struct
{
emxArray_char_T_1024 value1;
real_T value2;
uint32_T value3;
boolean_T value4;
} e_struct_T;

Они были созданы сторонним инструментом. Моя неудачная попытка инициализации value1 на C / C ++ выглядит следующим образом:

static char_T test[5] = { 'h', 'e', 'l', 'l', 'o'};

emxArray_char_T_1024 x;
x.data = test;
x.size = 5;

e_struct_T Parameters;
Parameters.value1 = x;
Parameters.value2 = 50;
Parameters.value3 = 3;
Parameters.value4 = FALSE;

Я хотел бы в конечном итоге выставить интерфейс C #, который принимает значения:

PerformCPlusPlusComputation(string value1, double value2, int value3, bool value)

который инициализирует e_struct_T в C / C ++. Любая обратная связь будет очень ценится. Спасибо!

0

Решение

Линии

x.data = test;
x.size = 5;

содержит две ошибки: во-первых, вы не можете назначить один массив другому, даже если они были одного размера. Используйте, например, std::copy копировать из одного в другой.

Другая ошибка заключается в том, что size member также является массивом, и вы не можете присвоить одно значение массиву. Вы должны назначить x.size[0],


Правильные линии мог выглядеть так:

std::copy(std::begin(test), std::end(test), std::begin(x.data));
x.size[0] = sizeof(test);
2

Другие решения

Других решений пока нет …