C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Теория написания расширяемых программ
Guest
Отправлено: 15.02.2004, 14:09


Не зарегистрирован







Привет!
Интересует, как пишутся расширяемые программы. Ну например возьмём
такую прогу как Miranda. Там все дополнительные фичи реализованы через разные DLL. Я конечно понимаю, что такое DLL и как она работает. Но как можно написать DLL, которая изменяет или добавляет какие-то объекты(или визуальные элементы) на главную формы Миранды ?!!!??!
Ну например в Миранде есть плагин SmileyAdd, который при его подключении добавляет в окно сообщений Миранды кнопку со смайлами и соответственно обработчики для обработки нажатия и т.д...
Мне непонятно, каким же все-таки образом можно написать подобную вещь, не изменяя исходного кода Миранды ?! Неужели все реализовано в DLL?? Тогда каким макаром на главной форме Миранды, вернее в окне сообщений создаётся эта кнопка со смайлами?

Каким образом пишутся подобные вещи? Очень интересно. Если есть ссылки на какие-нибудь статьи по этому поводу или исходники подобных прог,то plz поделитесь.
** pasha
Отправлено: 15.02.2004, 17:54


Не зарегистрирован







А в чем проблема ? Создаете компоненты динамически.
---
Например, в главной программе на форме есть меню (MainMenu),
нужно в dll создать новые пункты меню.

В программе (exe) определяете

extern "C" void __declspec(dllimport) CreateNewMenuItem(char* sp, TMenuItem* NMP);

Вызывате:
CreateNewMenuItem("Новый пункт меню", N2);

В dll определяете эту функцию
Создаете динамически подменю в меню, указатель на который
передан из главной формы в функции CreateNewMenuItem()

CODE

     TMenuItem* NMPrint;
     NMPrint->Clear();
     TMenuItem* Itm = new TMenuItem(NMPrint);
     Itm->Caption = sp;
     Itm->Name = "NARep_"+IntToStr(i);
     NMPrint->Add(Itm);


На главной форме появляются новые пункты меню.
Также можете создавать и другие компоненты — кнопки и т.д
Guest
Отправлено: 16.02.2004, 14:28


Не зарегистрирован







Спасибо за объяснение. Но откуда к примеру основной exe знает, что кому-нить прийдет в голову написать Dll которная реализует на осн. форме кнопку именно в опред. месте?!
Этож нужно все предусмотреть?!
Т.е. чтобы каждый желающий чел, мог накатать свою Dll без изменения exe-шника.....
Guest
Отправлено: 19.02.2004, 17:05


Не зарегистрирован







http://www.buildercpp.net.ru/phpBB2/viewto...topic.php?t=231

Вернуться в Вопросы программирования в C++Builder