Определена ли упаковка структур, передаваемых в COM-интерфейсах?

Я работаю со сторонним COM-сервером с его собственным пользовательским интерфейсом, который устанавливает и получает структуры как некоторые из своих свойств. Так получилось, что я использую C++ для клиента. Я опубликовал некоторый репрезентативный код из файла IDL ниже с измененными именами и удаленными идентификаторами GUID.

Определена ли упаковка структуры или это просто удача, что мой клиентский код использует те же настройки упаковки, с которыми был построен COM-сервер? Может ли это пойти не так в проектах, где параметры упаковки компилятора C++ по умолчанию были изменены? Есть ли настройка пакета прагмы, которую я мог бы использовать, чтобы убедиться, что настройки упаковки клиентского компилятора верны?

Я не вижу прагм или операторов упаковки ни в IDL, ни в заголовочном файле, сгенерированном из MIDL. Что произойдет, если клиент вместо этого будет использовать C#или VB? Является ли поведение упаковки более четким, если оно вызывается через механизм IDispatch?

struct MyStruct
{
    int a, b;
};

[
    object,
    uuid( /* removed */ ),
    dual,
    nonextensible,
    pointer_default(unique)
]
interface IVideoOutputSettings : IDispatch{

    [propget, id(1), HRESULT MyProperty([out, retval] struct MyStruct* pVal);
    [propput, id(1), HRESULT MyProperty([in] struct MyStruct newVal);

    /* other methods */
};
5
задан persiflage 13 April 2012 в 17:29
поделиться