Такая проблема:
Есть класс(имплементация COM интерфеиса на ATL)в котором используется некая структура .
Мне нужно для нормальной работы получить доступ к этой структуре из другого класса(также являющегося реализацией другого интерфейса этого же COM объекта).
Описатть эту структуру в IDL не могу тк не знаю что там вообще такое — она из библиотеки стороннего разработчика, да и не желательно её "выставлять на показ".
PS.Я совсем уже запарился под конец рабочего дня — ничего в голову не лезет... помогите плз чем сможете...
Здравствуйте, He3HauKa, Вы писали:
HHK>Здравствуйте, He3HauKa, Вы писали:
HHK>Да, и еще одно — у второго класса есть только указатель на интерфейс первого(так необходимо, тк связи меняются динамически в клиентском приложении).
HHK>Буду очень благодарен.
а почему бы не сделать указатель не на интерфейс а на имплементацию класса1?
Здравствуйте, shurik., Вы писали:
S>а почему бы не сделать указатель не на интерфейс а на имплементацию класса1?
Ну задумка была такая — несколько ActiveX объектов. Для полной функциональности им необходимо было иметь указатели друг на друга, причем связи эти можно было б изменять к примеру и в Java Script, вот в этом и была проблема т.к. там только и можно было присвоить указатель на интерфейс(наверно непонятно разъясняю). Вот. А классы уже сами должны были обращаться к свойствам и методам не описанным в IDL(т.е. не входящими в интерфейс — такая себе защита от дурака).
Вот такая каша.
На данном этапе от этой концепции отказались, хотя найти решение такой задачки я был бы не против .
P.S. Ну если не зацикливаться на ООП то можно создать глобальный SAFEARRAY или STL массив указателей, но как-то некрасиво . Вот я и отписался на этот форум для поиска более красивого решения .
Здравствуйте, Незнайчище, Вы писали:
Н>Ну задумка была такая — несколько ActiveX объектов. Для полной функциональности им необходимо было иметь указатели друг на друга, причем связи эти можно было б изменять к примеру и в Java Script, вот в этом и была проблема т.к. там только и можно было присвоить указатель на интерфейс(наверно непонятно разъясняю). Вот. А классы уже сами должны были обращаться к свойствам и методам не описанным в IDL(т.е. не входящими в интерфейс — такая себе защита от дурака).
Если твои связанные объекты не находятся в одном процессе, то между процессами ты можешь передать только то, что описал в IDL. Это если ты хочешь использовать автоматизационный маршаллинг через библиотеку типов (что по дефолту) и не хочешь писать сам маршаллящий код. Если разговор идет о JavaScript то typelib-маршаллинг это единственный вариант.
Здравствуйте, He3HauKa, Вы писали:
HHK>Добрый день.
HHK>Такая проблема: HHK>Есть класс(имплементация COM интерфеиса на ATL)в котором используется некая структура . HHK>Мне нужно для нормальной работы получить доступ к этой структуре из другого класса(также являющегося реализацией другого интерфейса этого же COM объекта). HHK>Описатть эту структуру в IDL не могу тк не знаю что там вообще такое — она из библиотеки стороннего разработчика, да и не желательно её "выставлять на показ". HHK>PS.Я совсем уже запарился под конец рабочего дня — ничего в голову не лезет... помогите плз чем сможете...
То есть тебе надо передавать эту структуру между интерфейсами, но ты не знаешь что в ней. А вся твоя система функционирует в едином процессе? Если да то проще всего в IDL методе написать, что он принимает допустим void* и передавать там указатель на эту структуру. Если у тебя внепроцессный COM-сервер, то тогда не знаю всё зависит от того что в этой структуре.
Кстати еслим хочешь описывать в IDL структуры, интерфейсы и прочее невидимые при импорте tlb используй атрибуты hidden и restricted.