Я пытаюсь передать массив структуры, экспортируемой из библиотеки C # в код C ++. цель — передать SAFEARRAY структуры из c ++ в c #.
Я следовал инструкциям
но получая эту ошибку с помощью вызова GetRecordInfoFromTypeInfo
0x80028019 Старый формат или недопустимая библиотека типов.
Если вам не нужно иметь интерфейс, должно работать следующее:
void MyMethod([MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] MyStruct[] data, long size);
Если вам нужно использовать SAFEARRAY, я ожидаю, что следующие будут работать (но я не уверен на 100%, так как у меня нет машины с Windows на данный момент):
void MyMethod([MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_USERDEFINED)] MyStruct[] data);
Если вы можете позволить себе изменить свой struct
в class
тогда это также сработает и избавит вас от хлопот UDT:
void MyMethod([MarshalAs(UnmanagedType.SafeArray, SafeArraySubType=VarEnum.VT_UNKNOWN)] MyStruct[] data);
Содержит ли структура строки? Если это так, не забудьте пометить их [MarshalAs (UnmanagedType.BStr)]. В COM есть ограничение: строки в массивах структур должны быть BSTR. По умолчанию TLBExp — LPWSTR, и затем вызов умирает. Посмотреть здесь: http://msdn.microsoft.com/en-us/library/z6cfh6e6(v=vs.100).aspx