Re[3]: Проблема с передачей массивов UDT в exe сервер
От: Максим Алексейкин Россия  
Дата: 25.09.02 08:47
Оценка:
Здравствуйте Максим Алексейкин, Вы писали:

МА>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 "забыла" предупредить остальной мир или скромно умолчала.
ICQ #311116826
Re[4]: Проблема с передачей массивов UDT в exe сервер
От: Алекс Россия http://wise-orm.com
Дата: 25.09.02 09:02
Оценка:
Здравствуйте Максим Алексейкин, Вы писали:

МА>Здравствуйте Максим Алексейкин, Вы писали:


хъ

МА>Кажется выяснил как побороть. Если структура CRESCTRLITM содержит хотябы один элемент размером 4 байта (BSTR, long), то всё работает на ура. Т.е. надо переписать так:

МА>
МА>typedef [uuid(2779091F-9AF1-463f-8C88-F4611E6C01BF)] struct CRESCTRLITM
МА>{ 
МА>   long UCI;
МА>   long NCtrl;
МА>} CRESCTRLITM;
МА>

МА>и всё будет работать. Видимо это связано с каким-нибудь выравниванием данных при маршалинге. О чём MS "забыла" предупредить остальной мир или скромно умолчала.

тогда используй
#pragma pack(4)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.