C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с библиотеками dll  (Прочитано 1066 раз)
Program87
Участник


Сказали спасибо: +1/-0
Offline

Сообщений: 137


Работа с библиотеками dll
« : 10 Апрель 2012, 22:54:23 »

Здравствуйте уважаемые форумчане, заранее прошу прощения если задаю вопрос ответ на который здесь уже бы. (Долго искал но не нашел)

Дело в том что у меня есть приложение которое использует динамически подключаемую библиотеку, Смысл такой мне нужно сделать так что бы при вызове библиотеке происходили изменения в самом приложении:

Код:
extern "C" void __export  test()
{
    Form1->Caption = "123";
}
Скажите это вообще возможно или нет? И если да то как это сделать?
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Работа с библиотеками dll
« Ответ #1 : 12 Апрель 2012, 20:05:20 »

Конечно возможно. Есть несколько способов. Вот 2 самых очевидных.

1) Передавать дескриптор (Handle) формы в DLL в виде long (DWORD), затем посылать сообщения (API-шные или пользовательские), например
Код
// MainForm.h
#define WM_MYMESSAGE WM_USER+1
// ...
void __fastcall MyMessageHandler(TMessage &AMessage);
BEGIN_MESSAGE_MAP
  VCL_MESSAGE_HANDLER(WM_MYMESSAGE , TMessage, MyMessageHandler);
END_MESSAGE_MAP(TForm);
 
// MainForm.cpp
void __fastcall TMainForm::MyMessageHandler(TMessage &AMessage)
{
  String* ACaption = reinterpret_castString*>(AMessage.WParam);
  if(ACaption) {
     Caption = *ACaption;
     delete ACaption;
  }
}
 

2) Передавать указатель на форму в DLL в виде void*, затем приводить его к типу TForm*:
Код
// из приложения:
DLLFunction("caption", (void*)this);
 
// функция в DLL:
void DLLFunction(const char* ACaption, void* AData)
{
  if(!AData) return;
  TForm* FM = reinterpret_castTForm*>(AData);
  if(FM) FM->Caption = ACaption;
}
 


Конечно, в DLL д.б. подключены модули для работы с VCL (Forms, Classes).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.148 секунд. Запросов: 23.