Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > ActiveX


Автор: Лена 7.9.2006, 12:02
Как осуществить следующее:
При нажатии на кнопку, надо вывести в список все зарегистрированные на компьютере ActiveX. После выбора из списка выбранный ActiveX должен загружаться на форму и в соседних списках должны быть автоматически загружены его свойства и методы. Выбрав метод из списка и задав параметры для него пользователь при желании может выполнит его.
Если можно расскажите по подробней шаги реализации такой программы.
Спасибо.

Автор: pandrew 7.9.2006, 13:24
Вообще-то вся желаемая тобой функциональность уже реализована в MS SDK.

Список формируется на основе анализа реестра (HKEY_CLASSES_ROOT), откуда можно вытащить CLSID.
Далее видимо надо будет загружать OCX в контейнер (TOleContainer) и вытаскивать cписок методов.

Автор: Лена 7.9.2006, 13:49
>Вообще-то вся желаемая тобой функциональность уже реализована в MS SDK.

Что-то ни могу найти.  smile 
Подскажите где это описано в  MS SDK?


Автор: pandrew 7.9.2006, 15:36
К сожалению точно не помню, а найти быстро не получается. 
Называлась утилита приблизительно OleTestContainer входила в полную MS VS6

Автор: Лена 7.9.2006, 15:50
>входила в полную MS VS6 

К сожалению мне это надо реализовать на Builder. 
Я посмотрела в реестре раздел CLSID, но как вытащить названия не знаю. Вот в Builder если нажать меню Project далее Import Type Library, то получаем окно со списком ActiveX (см.рисунок). Как построить такой список? 

Автор: pandrew 7.9.2006, 16:21
Цитата(Лена @ 7.9.2006,  15:50)
К сожалению мне это надо реализовать на Builder. 

Это что учебное задание? Но, я думаю, непосредственно в коде построения списка, разница между VS и Bulder будет малозаметна.
Цитата(Лена @ 7.9.2006,  15:50)
Я посмотрела в реестре раздел CLSID, но как вытащить названия не знаю.

А если, зная CLSID сгонять на ветку HCR\Typelib?
Можешь еще убедиться, что при выборе пунктов Project/Import type library и Component/Import ActiveX строятся разные списки.
Я точно знаю, что списки строятся через просмотр реестра HCR\CLSID с анализом ветвей InprocServer32 и др.. Ищи инфу по регистрации COM в системе (по Builder и Delhi книги Елмановой, Калверта, Холингвэрта) и/или книжки по реестру Windows.
Возможно в ОС существует готовый ActiveX для построения списков и работы с интерфейсами. Больно уж похожи списки и диалоги для импорта в разных IDE. 
Попробуй сходить на форумы VS там больше народу.

Вот вроде что-то похожее на тест-контейнер, но современное
http://msdn2.microsoft.com/en-us/library/ms241446.aspx

Автор: Лена 7.9.2006, 16:34
>Я точно знаю, что списки строятся через просмотр реестра HCR\CLSID с анализом ветвей InprocServer32 и др

Я думаю надо анализировать в CLSID папку ProgID. Вот как вытащить название пока не разобралась.

> Калверта,

Эта книга у меня есть smile

> Возможно в ОС существует готовый ActiveX для построения списков и работы с интерфейсами

Мечта бедной Лены! smile

> Попробуй сходить на форумы VS там больше народу.

Нашла код для VC но на Builder переделать не получилось: http://www.codeguru.com/cpp/com-tech/activex/controls/article.php/c5527/

Спасибо за ссылку, буду пытаться разобраться. smile

Автор: pandrew 7.9.2006, 17:06
По-моему это то что тебе надо, ну а переделывать там вообще нечего. Добавь себе в проект 
Код

#include "objbase.h"
#include "comcat.h"

и замени последние строки
Код

 CString strControlName(bstrClassName);
 m_list1.AddString (strControlName);

на
Код

 AnsiString strControlName(bstrClassName);
 m_list1->Items->Add (strControlName);

где m_list1 - TListBox на твоей форме

Автор: Лена 7.9.2006, 17:23
ПОЛУЧИЛОСЬ, большое спасибо!  smile 
Я до этого добовляла не тот инклуд: #include <shlobj.h> для ф-ции CoInitialize


Жаль местами код не понятный.  smile 

Теперь еще более сложная задача предстоит загрузить выбранный ActiveX в контейнер.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)