Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Подключаем ActiveX/COM/OLE компонент

Поиск:
Если Вы скачали из сети некий крутой супер-компонент, а он - оказывается, без исходников, в виде какой-то дурацкой OCX, или DLL, а в документации ещё и написано, что он подходит как для VC++, так и для Visual Basic - не расстраивайтесь :)

Первым делом - нужно зарегистрировать новый ActiveX/COM/OLE компонент с помощью утилиты regsvr32.exe (можно зайти в Пуск/Выполнить... и набрать regsvr32.exe полный_путь_и_имя.dll). Теперь, если этот компонент является GUI-компонентом (т.е. представляет собой окно, тулбар, диалог, кнопку и т.п.), тогда можно просто зайти в меню
Project/Add To Project/Components and Controls..., и следовать инструкциям в появившемся окне.
и в списке Registered ActiveX Controls найти имя нашего компонента. Далее - даблклик, Ok и мы видим новую иконку на палитре редактора ресурсов - можно вставить наш компонент в окно диалога.

В случае же, если компонент - совсем не GUI, а например Chilkat Zip или какой-нибудь MIME Sniffer, тогда действия будут таковы: заходим в Class Wizard, выбираем Add Class..., в выпадающем меню выбираем From a type library..., выбираем тип файлов "All files...", далее - показываем на скачанную нами DLL/OCX, помечаем все строки в списке классов, нажимаем Ok.

Получили набор классов, сгенерированный Class Wizard-ом. Теперь хорошо бы создать объект класса, чтобы можно было вызывать его методы. Итак, допустим у нас добавился класс с именем ISuperComponent (имя может начинаться как с букв "I", "С", так и с любой другой - венгерская нотация в ActiveX'ах встречается не часто). Подключаем сгенерированный заголовочный файл к своим исходникам (все новые классы лежат в одном и том же .H/.CPP). В функцию InitInstance() добавляем вызов AfxOleInit(), если его там нету. Чтобы создать объект класса ISuperComponent:
1) определяем ProgID или GUID нашего компонента. Если не знаем GUID, то в реестре заходим в HKEY_CLASSES_ROOT, и ищем по алфавиту примерное название компонента (в нашем случае это будет SuperComponent.SuperComponent). Если одинаковых названий несколько, и они отличаются на цифру в конце - берём последнее, или без цифры.
2) в исходном тексте программы пишем:
Цитата
#include "generated_file.h"  // сгенерированный ClassWizard-ом файл

// ...

{
     // создадим объект класса ISuperComponent
     ISuperComponent  obj;
     obj.CreateDispatch("SuperComponent.SuperComponent");
     // ... теперь можно вызывать методы объекта "obj".
}


Если какой-то метод, например ISuperComponent::AddPart(long index), в результате возвращает LPDISPATCH, то нужно по документации (или чисто интуитивно :)) определить, какой из сгенерированных классов подходит под это понятие (в нашем случае, скорее всего среди классов найдется какой-нибудь IPart), и действовать таким образом:
Цитата
ISuperComponent  obj;
obj.CreateDispatch("SuperComponent.SuperComponent");
IPart  added = obj.AddPart(0);


Если же один из методов требует в качестве параметра всё тот же LPDISPATCH, то опять-же нужно посмотреть, какой из классов подходит, и передавать вместо LPDISPATCH объект нужного класса.

Подсказка: вышеописанным способом можно подключить DLL-ку из папки с установленным Office2000/XP, и работать с типами VBA (Application, Document, Selection и пр.) как с обычными классами C++.
Автор: mr.DUDA
Сайт: http://






Просмотров: 3793

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную