Вопрос для профессионалов. Подключение к событиям.
От: Sergey Yermack  
Дата: 24.05.01 16:52
Оценка:
ATL только начинаю осваивать, поэтому, возможно, вопрос сформулирую не очень точно, но постараюсь :)

Есть объект сконструированный как Full ATL control. Назовем его MyContainerControl.
Имеет ,естественно, свойства, методы и события, интерфейсы дуальные. Предполагается, что MyContainerControl будет использоваться как ActiveX cоntrol в проектах на VB и Delphi.

В сервере (dll) и библиотеке (tlb) мною написан и описан еще один объект, названный например EnclosedObj. Последний реализован как Simple object и не имеет ни окна ни IQuickActivate ни других интерфейсов, которые позволяли бы "положить" его на форму VB и обращаться с ним как с обычным ActiveX control'ом (собственно это и не контрол). Тем не менее, кроме свойств и методов EnclosedObj имеет IConnectionPoint и способен генерировать некоторые события.

В MyContainerControl есть внутренний динамическим массив arpObjArray[], в котором храняться указатели на объекты типа EnclosedObj. Последние могут создаваться при потребности из кода MyContainerControl с помощью оператора new. Подчеркиваю, внутри кода MyContainerControl, а не из кода в программе на VB и Delphi.

Отсюда следует, что ни VB ни Delphi даже не догадываются, что "внутри" MyContainerControl "живут" еще и другие COM объекты (ведь они не зарегистрированы во внутренних таблицах VB или Delphi), при этом количество их может изменяться, и каждый из них может генерировать события.

Доступ к конкретному EnclosedObj (в коде VB или Delphi) осуществляется примерно так:

MyContainerControl1.EnclosedObjects(2)
или
MyContainerControl1.EnclosedObjects.Item(2)

Для аналогии с приведенной архитектурой приведу такой пример из Excel:
ThisWorkbook.Sheets(2) — для доступа к рабочему листу.

Все у меня работает, кроме одного. Предложите, как ловить события от объектов EnclosedObj, хранящися в коллекции EnclosedObjects, да еще различать их в коде на VB, например:

Sub EnclosedObj2_OnReadyStatus()
....
Как заставить VB и Delphi увидеть, что в проекте присутствуют и эти объекты, а не только MyContainerControl?

Можно ли из кода MyContainerComtrol создать объект EnclosedObj (не имеющий окна ни на стадии проектирования, ни исполнения) таким способом, чтобы о его существовании узнал клиент (форма и проект VB или Delphi) и смог ловить его события?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.