Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.11;
Скачать: CL | DM;

Вниз

Как передать значения из DLL в приложение?   Найти похожие ветки 

 
denmin ©   (2008-03-18 10:00) [0]

Здравствуйте.
Есть программа, которая использует dll, которая в свою очередь перехватывает открытие и закрытие окон и пишет все это дело в текстовый файл. но нужно чтобы передавала значения в саму программу использующую эту библиотеку.
Как это сделать? Все перерыл, ничего не нашел.
Заранее благодарен.


 
Сергей М. ©   (2008-03-18 10:03) [1]


> которая в свою очередь перехватывает открытие и закрытие
> окон


Глоб.хук что ли ?


 
Style ©   (2008-03-18 10:20) [2]


> передавала значения в саму программу использующую эту библиотеку.


какие вообще проблемы ? Библиотека твоя? Ну напиши функцию экспортируемую , назови ее как нить GetValue, пусть она возвращает значение при вызове из твоего приложения. Можешь также в процедуру инициализации твоей библиотеки передать Handle главного окна программы, и при необходимости посылать пользовательское оконное сообщение из библиотеки главному окну.


 
Семеныч   (2008-03-18 11:48) [3]

> denmin ©   (18.03.08 10:00)

> Как это сделать?

Зависит от ответов на такие вопросы:

1. Можете ли Вы эту DLL перекомпилировать?

2. DLL перехватывает открытие и закрытие окон через глобальный хук или как-то иначе?


 
denmin ©   (2008-03-18 14:48) [4]

библиотека моя. перекомпилировать могу. т.к. машины не очень мощный, то не хотелось бы использовать sendmessage. хук на WM_CBT. надо чтобы при срабатывании хука мое приложение получало сообщение но при этом загрузка системы была минимальна. слышал что-то типа внутреннего события, но не помню что такое. может ошибаюсь.


 
Сергей М. ©   (2008-03-18 15:00) [5]


> может ошибаюсь


Ошибаешься.


 
Семеныч   (2008-03-18 15:26) [6]

> denmin ©   (18.03.08 14:48) [4]

Хук глобальный, поэтому механизм обратного вызова (callback) не прокатит. Используйте Send/PostMessage. Через систему проходит такая куча сообщений, что Ваши будут каплей в море.


 
denmin ©   (2008-03-18 15:31) [7]

Вот пример исходника библиотеки на VB:

Начало библиотеки (объявление общей функции)

Option Explicit

Public Event GetWin32Prc (lParam as Long) – общая функция

Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long


Обработка перехвата в библиотеке

CopyMemory EMSG, ByVal lParam, Len(EMSG)
   Case HCBT_CREATEWND
RaiseEvent GetWin32Prc (EMSG.lParamLow)

Это начало приложения…

Dim WithEvents sh As cSystemHook

Private Sub sh_ GetWin32Prc (lParam as Long)
Msgbox “Результат: ” & CStr(lParam)
End Sub


 
Сергей М. ©   (2008-03-18 15:43) [8]


> denmin ©   (18.03.08 15:31) [7]


К чему приведен этот VB-код ?
К твоей задаче он не имеет отношения.


 
denmin ©   (2008-03-18 15:58) [9]

в окне этого VB приложения я вижу все открываемые окна, процессы. в приложении, а не в текстовом файле. в этом примере передается значение от библиотеки приложению через функцию, Public Event GetWin32Prc (lParam as Long) – общую функцию. в библиотеке объявлена функция Public Event GetWin32Prc (lParam as Long) и этаже функция объявлена в приложении

Dim WithEvents sh As cSystemHook
Private Sub sh_ GetWin32Prc (lParam as Long)

и посредством этого у приложнения и библиотеки есть обратная связь. возможно ли  в дельфи создать нечто подобное?


 
denmin ©   (2008-03-18 16:27) [10]

есть ли способ использовать WM_CBT без использование библиотек?


 
Сергей М. ©   (2008-03-18 16:30) [11]


> denmin ©   (18.03.08 15:58) [9]


Ты не понимаешь механизм работы глобальных хуков.
Экз-ры хук-библиотеки находятся в изолированных адресных пространствах процессов, поэтому RaiseEvent тут идет лесом.

Читай [6]


 
Сергей М. ©   (2008-03-18 16:33) [12]

Или у тебя локальный хук ?

Тогда, разумеется, RaiseEvent работает, и без dll можно обойтись, равно как и без Send/PostMessage



Страницы: 1 вся ветка

Текущий архив: 2009.01.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
15-1226659506
Palladin
2008-11-14 13:45
2009.01.11
Exit внутри Try/Finally


15-1226588778
antonn
2008-11-13 18:06
2009.01.11
нужен jpeg.pas


2-1227768640
Саня
2008-11-27 09:50
2009.01.11
Компонент TWinList


15-1226564342
Нов_и_чок
2008-11-13 11:19
2009.01.11
Справочник Win32 для XP


15-1226651963
Поросенок Винни-Пух
2008-11-14 11:39
2009.01.11
Пятничное позитивище