![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
dll наоборот :)
CrazyAngel © (2002-09-24 16:44:00)Кто-нибудь знает как находясь в dll вызвать функцию расположенную в моей программе ?
Viktor Kushnir (2002-09-25 07:12:00) [1]А я передовал просто указатель на нужную функцию из exe в dll
PVOzerski (2002-09-25 05:14:00) [2]Вообще-то это примерно то, что называется callback-функция и чем кишит WinAPI. Использование callback"а сводится к получению dll"ью точки входа в callback (для чего соответствующий адрес передается в dll как параметр некой функции - хотя можно извратиться и через экспортируемую функцию - только это редко действительно бывает необходимо). Только не забывайте контролировать соответствие типов и соглашений о вызовах.
работающий пример (D3):
program EXE;
{$apptype console}
function MyCallBack(x:integer):integer;
begin
Result:=2*x;
end;
function FromDll(p:pointer):integer;
external "DLL.dll" name "FromDll";
begin
writeln(FromDll(@MyCallBack));
end.
library DLL;
{$apptype console}
type
tProc=function(x:integer):integer;
function FromDll(p:tProc):integer;export;
var
x:integer;
begin
readln(x);
Result:=p(x);
end;
exports
FromDll name "FromDll";
begin
end.
CrazyAngel (2002-09-24 17:30:00) [3]OK, спасибо за ответы пойду еще экспериментировать :)
Digitman (2002-09-24 17:26:00) [4]да .... только не "hwnd екзешника", а его hInstance, полученный по GetModuleHandle("file.exe")
CrazyAngel (2002-09-24 17:09:00) [5]Т.е. если я напишу в export имя этой функции то как мне получить ее адрес ?
getprocadress c указанием hwnd екзешника ?
Digitman (2002-09-24 17:05:00) [6]Нужно знать заранее (или узнать в run-time) адрес этой ф-ции.
Способов - море. Начиная с того, которым ты пользуешься для определения адреса ЭКСПОРТИРУЕМОЙ ф-ции в DLL-модуле ... Точно так же и EXE-модуль вправе экспортировать ф-цию
Song (2002-09-24 16:47:00) [7]Послать какое-нибудь сообщение программе, которая, получив последнее, исполнит вашу функцию.