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

 
Как наоборот, вызвать функцию из EXE, EXE + DLL динамическое связывание
** pasha
Отправлено: 17.06.2004, 08:05


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







Я собираю DLL, которая подключается к EXE динамически.
(LoadLibrary(), GetProcAdress() ... ),
из EXE получаю доступ к функциям в DLL.
Функции из DLL вызываются нормально.

Но мне нужно и наоборот,
в DLL мне нужно вызвать некоторую функцию из EXE,
как это сделать ? Ваши варианты ?
pagan
Отправлено: 17.06.2004, 08:16


Ученик-кочегар

Группа: Участник
Сообщений: 22



Не хочу еще раз переписывать одно и тоже, поэтому просто даю ссылку
http://borland.xportal.ru/forum/viewtopic.php?t=10392
** pasha
Отправлено: 17.06.2004, 10:50


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







Вот это мне и надо было:
QUOTE
HMODULE hExe = GetModuleHandle(NULL);

не мог найти. smile.gif

Вариант Sergey Boyko мне не подходит, так как у меня dll
"ничего не знает" ни о каких других модулях exe (типа .h и др.)

Ваш вариант уже вставил и запытал, все Ок ! Спасибо.

-----

Только оказалось в данном случае, что мне нужно было пойти
по другому пути — сообщить из EXE в DLL о произошедших
изменениях в exe (движение по набору данных в базе данных),
и отразить их на форме, созданной этой dll (и о которой exe
ничего не знает)

в EXE:
1 передал в DLL адрес ID
2
CODE

void __fastcall TForm1::DataSourceDataChange(TObject *Sender, TField *Field)
{
  ID  = myTable->FieldByName("ID")->Value;
  //--- находим нашу DLL, посылаем ей сообщение
  HWND dll_hwnd = FindWindow(lpClassName,lpWindowName);
  if(dll_hwnd) PostMessage(dll_hwnd, WM_USER+1, NULL, NULL);
}

в DLL: // перехватываем сообщение
CODE

#define WM_CHANGE_DS WM_USER+1
BEGIN_MESSAGE_MAP   // WM_CHANGE_DS = WM_USER+1
   MESSAGE_HANDLER(WM_CHANGE_DS, TMessage, ChangeDetail)END_MESSAGE_MAP(TComponent)

// обрабатываем его
void __fastcall TFDLL::ChangeDetail(TMessage& Message)
{
  Label1->Caption = myID;
}
//---------------------------------------------------------------------------


все работает.

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