Додавання точки з'єднання до об'єкта

ATL підручник демонструє, як створити елемент керування з підтримкою для підключення точок, як додати події а потім як здійснювати підключення poi&nt.nbsp; IConnectionPointImpl обговорює, як ATL реалізує точка підключення.

Для здійснення точку з'єднання, ви маєте дві можливості:

У будь-якому випадку майстер точки підключення використовує бібліотеку типів робити свою роботу.

Примітка   Під час додавання метод до dispinterface, на яких ви вже реалізували точку з'єднання, ви повинні переконфігурувати .idl файл і виконайте процедуру, щоб додати точку підключення до елемента керування або об'єкта.

Щоб додати точку підключення до елемента керування або об'єкта

  1. Визначити dispinterface в блок бібліотеки .idl файл. Якщо встановлено прапорець Підтримки точки з'єднання на вкладці атрибути об'єкта ATL майстра, на dispinterface буде вже створено. Якщо ви не перевірити прапорець Підтримки точки з'єднання , слід додавати вручну dispinterface до файлу .idl. Нижче наведено приклад з dispinterface. Вихідні інтерфейси не зобов'язаний бути відправлення інтерфейсів, але багато мови сценаріїв, таких як VBScript та JavaScript вимагають цього, так що цей приклад використовує дві dispinterfaces:
    бібліотека DProjLib { importlib("stdole32.TLB"); importlib("stdole2.TLB");[ uuid(57BC50F0-780B-11d1-8C44-0060083E866C), helpstring ("Buddy подій») ] dispinterface DBuddyEvents { Властивості: методи: };
    
    

    Використовувати uuidgen.exe або guidgen.exe утиліти для генерації GUID.

  2. Додати dispi&nterface як [за замовчуванням, джерело] інтерфейсу у coclass для object.nbsp; Знову ж таки, якщо встановити прапорець на Підтримку точки з'єднання на вкладці атрибути цього елемента керування майстра ATL об'єкт, майстер створить [за замовчуванням, джерело] запис. Щоб додати цей запис вручну, додайте рядок жирним шрифтом:
    coclass Buddy { [Стандартний] інтерфейс IBuddy;[за замовчуванням, джерело] dispinterface DBuddyEvents;}

    Перегляньте у файлі .idl в Circ ATL зразком для прикладу.

  3. Додати методи і властивості події інтерфейсу за допомогою ClassView.

  4. Після того, як на dispi&nterface повністю визначені, скомпілювати .idl файл правою кнопкою миші FileView , файл .idl та вибравши компіляції option.nbsp; Це дозволить виробляти бібліотеки типів.

  5. Клацніть правою кнопкою миші класу у ClassView і виберіть Реалізувати точка підключення.... У діалоговому вікні буде відображено один або більше вкладок типу бібліотеки та кожній вкладці буде відображатися інтерфейсів для цього типу library.  Якщо вибрати інтерфейс і натисніть кнопку OK, вам буде:
    • Створити файл з проксі клас подій, що реалізує коду, який буде дзвонити в out-going для події.

    • Додати запис до карти точки підключення.

    • Додати коментар і #error (кажу вам замінити параметром NULL адресу в dispID) в список параметрів IProvideClassInfo2Impl.

    Якщо ви не побудували типу бібліотеки, ви побачите список всіх typelibs на ваш computer.  Ви повинні використовувати тільки один з цих інших typelibs визначити вашу точку з'єднання, якщо потрібно реалізувати точне ж вихідних інтерфейс в іншому typelib.  Якщо ви будуєте typelib з немає за замовчуванням джерелом інтерфейсу у на coclass, діалогове вікно буде відображено попередження повідомлення про ні підходить (джерело) інтерфейсу типу бібліотеки.

Для здійснення точка підключення з іншого об'єкта типу бібліотеки

  1. У ClassViewклацніть правою кнопкою миші на клас, який реалізує BEGIN_COM_MAP макрос і виберіть точка підключення здійснювати з контекстне меню.

  2. У діалоговому вікні Реалізувати точка підключення натисніть кнопку Додати Typelib....

  3. Виберіть одну з доступних тип libraries.  Після вибору типу бібліотеки, ви побачите список доступних інтерфейсів в бібліотеку типів.

  4. Виберіть один або декілька доступних інтерфейсів та натисніть OK.

  5. Редагування файлу .idl на будь-який:
    • Копіювати до dispinterface з idl файлів для об'єкта, що використовує якого джерело події.

    • Використання інструкцію, importlib типу бібліотеки.

Ось приклад з .idl файлу, що використовує точку з'єднання з керування Circ.

[
   UUID(38BBFD91-7575-11D1-8C3C-0060083E866C),
   Version(1.0),
   helpstring ("16190 1.0 бібліотеку типів")
]
Бібліотека MY16190Lib
{
   importlib("stdole32.TLB");
   importlib("stdole2.TLB");
   importlib("D:\\ATL25\\samples\\circ\\circ.TLB");   / / **** додати цей рядок [
      UUID(38BBFD9E-7575-11D1-8C3C-0060083E866C),
      helpstring ("Atl16190Ctl клас")
   ]
   coclass Atl16190Ctl
   {
      [Стандартний] інтерфейс IAtl16190Ctl;
      [за замовчуванням, джерело] dispinterface _CircEvents;      / / **** і це
   };
}

Index