Re[6]: Как передать массив объектов (c# .net) в c++ (com)
От: endri  
Дата: 13.10.05 16:19
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>
GZ>SAFEARRAY* psa;
GZ>pITestComponent->Users(1,&psa); // Users - функция, возвращающая массив UserInfo[]

GZ>UserInfo** pUserStruct = NULL; // UserInfo - структура, описанная в библиотеке типов(см. выше)
GZ>if (psa != NULL)
GZ>{     
GZ>    hr = SafeArrayAccessData(psa, (void**)&pUserStruct);
GZ>    _ASSERT(SUCCEEDED(hr) && pUserStruct);

GZ>      // здесь     используем полученный массив структур pUserStruct, но он заполнен  НЕ КОРРЕКТНО
GZ>   long uBound;
GZ>   long lBound;
GZ>   hresult = SafeArrayGetUBound(psa, 1, &uBound);
GZ>   if(FAILED(hresult))
GZ>      return hresult;
GZ>   hresult = SafeArrayGetLBound(psa, 1, &lBound);
GZ>   if(FAILED(hresult))
GZ>      return hresult;
     
GZ>   for (long i=lBound;l<=uBound;l++)
GZ>       MessageBoxW(NULL, (*pUserStruct)->_firstName, L"", MB_OK);

GZ>      hr = ::SafeArrayUnaccessData(psa);
GZ>    _ASSERT(SUCCEEDED(hr));
GZ>}
GZ>SafeArrayDestroy(psa);
GZ>


Всё равно не работает. Структура заполнена неправильно. Все поля типа string = "Bad ptr".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.