Форум: "Основная";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];
ВнизВызов обработчика события из DLL в программу Найти похожие ветки
← →
DProg (2003-10-22 09:53) [0]В DLL есть форма, на ней нажимается кнопка, вызывается событие, которое обрабатывается в программе, которая вызывает DLL. Возможно ли такое, где можно почитать, может есть пример?
Спасибою
← →
REA (2003-10-22 09:56) [1]Законам физики не протеворечит, хотя например параметр Sender может быть неактуален в другом модуле, т.к. разные таблицы классов.
Не пойму, впрочем, зачем такой подход - обычно наоборот форма в программе, а обработка в DLL.
← →
DProg (2003-10-22 10:07) [2]Требуется передавать строку, не обьект.
> Не пойму, впрочем, зачем такой подход - обычно наоборот форма > в программе, а обработка в DLL.
Действительно потебовалось...
Нет ли примера?
← →
REA (2003-10-22 10:21) [3]Строку тоже можно передать, но придется подключить ShareMem.
Стандартно в обработку нажатия передается Sender, но в принципе код можно вызывать уже из обработчика.
Передаем в DLL указатель на функцию.
Код типа такого (ошибок наверняка в нем много):
Type
TMyCallback = Procedure (MyString: String);
Procedure MyCallBack(MyString: String);
Begin
// Do something
End;
CallDLL(@MyCallBack);
В DLL:
MyCallback: TMyCallBack;
Procedure CallDLL(aMyCallback: TMyCallBack);
Begin
MyCallBack := aMyCallback; // Store for future use
// Show dialog here
End;
Procedure OnMyButtonClick(Sender: TObject);
Begin
If Assigned(MyCallback) Then MyCallback(MyString);
End;
Exports
CallDLL;
← →
Amoeba (2003-10-22 10:34) [4]А может вместо DLL использовать BPL - тогда никаких проблем и вопросов не возникнет
← →
DProg (2003-10-22 10:47) [5]> REA
type
TInterfaceProc = procedure(str: String);
TDesigner = class(TComponent)
private
iLib:HMODULE;
...
SetXMLEvent: function(procGetXML: TInterfaceProc): boolean;stdcall;
...
end;
function TDesigner.DllConnect: boolean;
begin
...
iLib := LoadLibrary("FormEdit.dll");
if iLib <> 0 then
begin
@SetXMLEvent := GetProcAddress(iLib,"_SetXMLEvent");
SetXMLEvent(@GetXML); // Ошибка! Variable required!
...
end;
procedure TDesigner.GetXML(pr: String);
begin
...
end;
← →
REA (2003-10-22 12:19) [6]Вообще говоря процедура и процедура объекта это разные вещи.
Если объявить
TInterfaceProc = procedure(str: String); of object;
(синтаксис не помню, но смысл такой)
то можно будет передать указатель на именно эту процедуру объекта. Не знаю вот только процедура какого экземпляра объекта будет вызываться (чем будет Self).
← →
NetKnight (2003-10-22 13:19) [7]А чем SendMessage/PostMessage не устраивает?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.03;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.014 c