Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Plutonia Experiment, Вы писали:
PE>>В метод приходит вариант с VT = 0x6009.
PE>> VT_DISPATCH = 9,
PE>> VT_ARRAY = 0x2000,
PE>> VT_BYREF = 0x4000,
PE>>Посколько пришел VT_BYREF, то надо заглядывать не в array.parray, а array.pparray.
PE>>array.pparray->fFeatures равняется 0x450
PE>> FADF_DISPATCH 0x0400
PE>> FADF_HAVEIID 0x0040
PE>> FADF_FIXEDSIZE 0x0010
PE>>Т.е. для С++ клиента надо сделать точно такой же Сейфаррей и передать его по ссылке в вариант.
А>Спасибо за советы, и помощь. Все теперь работает как надо.
А>Ты меня очень сильно выручил. Возможно, в процессе написания возникнут еще проблемы,
А>тогда обращусь к тебе, если ты не против.
А>А ты можешь подробнее описать, как проводил исследование чтобы узнать, какие биты передаются?
А>Может в будущем мне это поможет.
А>Для тех, у кого возникнут аналогичные проблемы, вот код, который я написал:
А>А> //создаю массив
А> SAFEARRAY* sa;
А> sa = SafeArrayCreateVectorEx(VT_DISPATCH,0,1,(void*)&IID_IDispatch);
А> //выставляю флаги
sa->>fFeatures = FADF_DISPATCH | FADF_HAVEIID | FADF_FIXEDSIZE;
А> //получаю указатель на интерфейс IDispatch у смарт-указателя на IAcadPolyline
А> IDispatch* pIAcadEntity;
А> hr = Contur->QueryInterface(IID_IAcadEntity,(void **)&pIAcadEntity);
А> if (FAILED(hr)) return;
А> //добавляю в единственный элемент массива полученный указатель интерфейс
А> long idx[1] = {0};
А> hr = SafeArrayPutElement(sa,idx,pIAcadEntity);
А> if (FAILED(hr)) return;
А> //создаю Variant, в который надо обернуть SAFEARRAY для передачи в метод AppendOuterLoop
А> VARIANT ConturArray;
А> VariantInit(&ConturArray);
А> ConturArray.vt = VT_ARRAY|VT_DISPATCH|VT_BYREF;
А> ConturArray.pparray = &sa;
А> //вызываю проблемный метод, который теперь отлично работает
А> hr = iHatch->AppendOuterLoop(ConturArray);
А> if (FAILED(hr)) return;
А> //зачистка структур в памяти, дело до которой не доходит
А> pIAcadEntity->Release();
А> SafeArrayDestroy(sa);
А>
Я пытался сделать как написано в этом сообщении, но при компиляции получаю сообщение
error C2065: 'IID_IAcadEntityPtr' : undeclared identifier
Где взять IID_IAcadEntity
Я только начинаю изучать COM, OLE
поэтому наверное это неправильнй вопрос
помогите пожалуйста
заранее благодарен