** 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); |
не мог найти.
Вариант 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;
}
//---------------------------------------------------------------------------
|
все работает.
|
|
|