Есть такая задача - необходимо передать с COM-сервера массив структур, содержащих инфу о юзерах. Структура такая (idl-файл):
| Код | typedef struct tagNetUserStruct { BSTR m_Surname; BSTR m_Name; BSTR m_Patronymic; BSTR m_Group; int m_Sex; long m_Birth_time; } NetUserStruct;
|
Метод, занимающейся собственно пересылкой (idl-файл):
| Код | interface IUserManager : IDispatch{ [id(2), helpstring("method GetAllUsers")] HRESULT GetAllUsers([ in ] long num, [ out, size_is (num) ] NetUserStruct cur_users[]);
|
реализация метода в cpp-файле:
| Код | ... //здесь идет заполнение массива result memcpy ( cur_users, result, num * sizeof( NetUserStruct ) );
|
Здесь в cur_users лежит все, что надо.
На стороне клиента вызываем метод:
| Код | NetUserStruct res_us[9]; long num_us = 9; HRESULT hr = user_man->GetAllUsers( num_us, res_us );
|
В итоге в res_us оказывается всего один элемент массива, все поля структуры верные. В чем может быть дело?
|