Здравствуйте Максим Алексейкин, Вы писали:
МА>typedef [uuid(2779091F-9AF1-463f-8C88-F4611E6C01BF)] struct CRESCTRLITM
МА>{
МА> short UCI;
МА> short NCtrl;
МА>} CRESCTRLITM;
МА>typedef [uuid(FC72D445-9E5A-4b74-89AE-C8FD28F5BCAC)] struct CRESCTRL
МА>{
МА> short PackIdent;
МА> [in, ref] SAFEARRAY (CRESCTRLITM) Items;
МА>} CRESCTRL;
Кажется выяснил как побороть. Если структура CRESCTRLITM содержит хотябы один элемент размером 4 байта (BSTR, long), то всё работает на ура. Т.е. надо переписать так:
typedef [uuid(2779091F-9AF1-463f-8C88-F4611E6C01BF)] struct CRESCTRLITM
{
long UCI;
long NCtrl;
} CRESCTRLITM;
и всё будет работать. Видимо это связано с каким-нибудь выравниванием данных при маршалинге. О чём MS "забыла" предупредить остальной мир или скромно умолчала.
Здравствуйте Максим Алексейкин, Вы писали:
МА>Здравствуйте Максим Алексейкин, Вы писали:
хъ
МА>Кажется выяснил как побороть. Если структура CRESCTRLITM содержит хотябы один элемент размером 4 байта (BSTR, long), то всё работает на ура. Т.е. надо переписать так:
МА>МА>typedef [uuid(2779091F-9AF1-463f-8C88-F4611E6C01BF)] struct CRESCTRLITM
МА>{
МА> long UCI;
МА> long NCtrl;
МА>} CRESCTRLITM;
МА>
МА>и всё будет работать. Видимо это связано с каким-нибудь выравниванием данных при маршалинге. О чём MS "забыла" предупредить остальной мир или скромно умолчала.
тогда используй
#pragma pack(4)