У меня есть COM-сервер, написанный на C ++, который должен взаимодействовать с клиентом, написанным на C #.COM-сервер C ++ экспортирует интерфейсные функции в структуру, которая содержит массив структур с массивом внутри
struct InnerStruct { int innerArray[ 100 ]; }
struct OuterStruct { int dummy; InnerStruct outerArray[ 2 ]; }
Таким образом, структуры имеют фиксированный размер.
Описание IDL:
HRESULT SetStruct( [in] const OuterStruct* par, [out, retval] int code );
HRESULT GetStruct( [out] OuterStruct* par, [out, retval] int code );
IDL компилируется нормально, и я вижу структуру в клиенте C #.
Проблема в том, что когда я вызываю функции интерфейса из клиента C #, я получаю / устанавливаю значения только в первомInnerStruct в OuterStruct.Второй InnerStruct содержит только мусор.
Отладчик C # показывает правильную структуру для OuterStruct и знает, что в OuterStruct есть 2 InnerStruct.
В C # объявление интерфейсных функций происходит отметафайл сервера, поэтому изменить описание нелегко.
Я попытался установить size_is () для параметров in и out, но компилятор MIDL этого не примет.
МожетЯ настроил какой-то конкретный маршалинг на параметры или как мне решить проблему получения полного OuterStruct через COM?