Re[8]: Передача массива объектов из С++ в C#
От: amOK Беларусь  
Дата: 26.03.04 18:30
Оценка:
Здравствуйте, Plutonia Experiment, Вы писали:

PE>Здравствуйте, amOK, Вы писали:


OK>>Дык собственно в С++ это будет в виде SAFEARRAY ** pArray. В том то и весь затык тут, что не понятно, как его правильно сделать, чтобы и С++ и С# поняли!


PE>Сам сейфаррей не знаешь, чем заполнить ?


Тип того. Короче такой код:

CComObject<CTTHelperClientItem> *pClient1 = NULL;
hr = CComObject<CTTHelperClientItem>::CreateInstance(&pClient1);

if (FAILED(hr))
  return hr;

CComObject<CTTHelperClientItem> *pClient2 = NULL;
hr = CComObject<CTTHelperClientItem>::CreateInstance(&pClient2);

if (FAILED(hr))
  return hr;

SAFEARRAY * sa;
sa = SafeArrayCreateVectorEx(VT_DISPATCH, 1, 2, (void**)&__uuidof(ICTTHelperItem));
        
long index = 1;

VARIANT var;
V_VT(&var) = VT_DISPATCH;

pClient1->QueryInterface(IID_ICTTHelperItem, (void **)&V_DISPATCH(&var));
SafeArrayPutElement(sa, &index, &var);

index ++;

pClient2->QueryInterface(IID_ICTTHelperItem, (void **)&V_DISPATCH(&var));
SafeArrayPutElement(sa, &index, &var);


ICTTHelperClientItem наследуется от ICTTHelperItem.
Вот на первом вызове SafeArrayPutElement летит исключение. Если поставить в SafeArrayCreateVectorEx VT_VARIANT, то тут всё нормально, но в С# не хочет приводится к нужному интерфейсу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.