Я пытаюсь связать некоторый код 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 ++. Любая обратная связь будет очень ценится. Спасибо!
Линии
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);
Других решений пока нет …