Получить интерфейс объекта, если знаешь его reference

Автор GTmAster, 31.10.10, 08:56:54

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

GTmAster

Здравствуйте. Пишу прикладную библиотеку для КОМПАС 3D 12, пока только начинаю разбираться. Вообщем, у меня такой вопрос.
Создаю макрообъект следующим кодом:

pDocument2D -> ksMacro(1);
pDocument2D -> ksCircle(x, y, 1.0, 1);
pDocument2D -> ksCircle(x + 0.33, y + 0.25, 0.1, 1);
pDocument2D -> ksCircle(x - 0.33, y + 0.25, 0.1, 1);
pDocument2D -> ksArcByAngle(x, y + 0.5, 1.0, (M_PI + M_PI * 0.3) * 180.0 / M_PI, (M_PI + M_PI * 0.7) * 180.0 / M_PI, 1, 1);
reference p = pDocument2D -> ksEndObj();

Собственно, теперь я знаю reference только что созданного макрообъекта. А как мне теперь получить его интерфейс IMacroObject ??

Пытался создать сначала интерфейс:

IMacroObjectPtr pMacro;
HRESULT hr = pDocument2D -> QueryInterface(IMacroObjectPtr::GetIID(), (void**)&pMacro);

Но это не работает с ошибкой E_NOINTERFACE.

Вообщем, как получить интерфейс объекта по его reference ???

cosmosliva

Во-первых
надо разобраться зачем вам это надо
если для редактирования созданного макрообъекта
то используйте ksOpenMacro (long macro);

Синтаксис Automation:
long ksOpenMacro (long macro);

Входной параметр:
macro - указатель на макроэлемент.

Возвращаемое значение:
1 - в случае успешного завершения,
0 - в случае неудачи.


Во-вторых
IMacroObject                        - взято из API 7 версии
pDocument2D -> ksMacro(1);   - взято из API 5 версии
и вроде как легкое перемещение между интерфейсами разных API нет
(хотя могу ошибаться)

да ИМХО
pDocument2D -> ksMacro(1); - это команда для переход в режим создания макрообъекта
не имеющая интерфейсов

Slaviation

ЦитироватьСобственно, теперь я знаю reference только что созданного макрообъекта. А как мне теперь получить его интерфейс IMacroObject ??
См. SDK,
ksDocument2D::ksGetMacroParam - Получить параметры макроэлемента.

GTmAster

Спасибо большое за подсказки, будем думать дальше...

cosmosliva

Чтож надо признать
был не прав по всем пунктам

правильный ответ
http://forum.ascon.ru/index.php/topic,18369.0/topicseen.html

по пунктам
ЦитироватьIMacroObject                        - взято из API 7 версии
pDocument2D -> ksMacro(1);   - взято из API 5 версии
и вроде как легкое перемещение между интерфейсами разных API нет
(хотя могу ошибаться)
Ошибся
используя функцию
ksTransferInterface
ЦитироватьПреобразовать интерфейсный объект одного типа API в интерфейсный объект API другого типа.

Ответ на вопрос в теме
ЦитироватьВообщем, как получить интерфейс объекта по его reference ???
используем функцию
ksTransferReference
ЦитироватьПреобразовать объект по reference из API5 в интерфейсный объект API7.
+ Благодарностей: 1