Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос про DLL [D7, XP]


savyhinst ©   (2008-09-11 17:12:00) 

Недеццкий вопрос:
Может ли function из DLL возвращать указатели на другие процедуры, хранящиеся в этой DLL?? И если может (а она может), то можно ди будет потом вызвать то, что она возвратит??
Спасибо за внимание.


Сергей М.   (2008-09-11 17:45:00) [1]


> так?


Уже лучше.
Но довольно глупо для этой цели реализовать целую функцию, в то время как переменную hp можно инициализировать статически и объявить ее идентификатор прямо в разделе exports


savyhinst   (2008-09-11 17:44:00) [2]

Сергей М. ©   (11.09.08 17:43) [17]
действительно... Ошипся


Сергей М.   (2008-09-11 17:43:00) [3]


> я в курсе


Ну так а что же ты тогда возвращаешь адрес переменной, зная что она будет уничтожена непосредственно передвозвратом из getProcs ?


savyhinst   (2008-09-11 17:43:00) [4]

я, кажись, врубился...

var
hp:THPlugin;

function getProcs:PHPlugin;
begin
hp.connect:=@Connect;
result:=@hp;
end;

так?


savyhinst   (2008-09-11 17:41:00) [5]

да, я в курсе


savyhinst   (2008-09-11 17:40:00) [6]

Ну вот, уже хоть что-то есть. А как там надо?


Сергей М.   (2008-09-11 17:40:00) [7]


> savyhinst ©   (11.09.08 17:31) [11]


Ты в курсе, что время жизни локальных переменных подпрограмм равно времени жизни (т.е. исполнения) этих подпрограмм ?


Сергей М.   (2008-09-11 17:39:00) [8]


> Как быть?


Исправлять грубейшиеошибки в function getProcs:PHPlugin;


savyhinst   (2008-09-11 17:31:00) [9]

Как быть?


savyhinst   (2008-09-11 17:25:00) [10]

//---объяв:

 const_LoadPluginProcNameA='proc';

 THConnectFunc=function(a:pointer):boolean;

 THPlugin=record
   connect:THConnectFunc;
   connect2:THConnectFunc;
 end;
 PHPlugin=^THPlugin;

 TGetPluginFunction=function:PHPlugin;

//---длл:

function Connect(const a:pointer):boolean;
begin
 result:=a<>nil;
end;

function getProcs:PHPlugin;
var
 hp:THPlugin;
begin
 hp.connect:=@Connect;
 result:=@hp;
end;

exports
 getProcs name const_LoadPluginProcNameA;

//---program

var
 p:TGetPluginFunction;
 hp:PHPlugin;
begin
h:=LoadLobrary('dll.dll');
if h=0 then ShowMessage('h=0');
p:=GetProcAddress(h,const_LoadPluginProcNameA);
hp:=p();
hp.connect(nil); //тут AV


Jeer   (2008-09-11 17:20:00) [11]


> не, тут что-то нетак


Верно, "нетак" пишется "не так".
Также и в остальном - писать надо правильно.


Сергей М.   (2008-09-11 17:20:00) [12]


> тут что-то нетак


Эт точно)


savyhinst   (2008-09-11 17:19:00) [13]

не, тут что-то нетак


stas   (2008-09-11 17:18:00) [14]

как вызываешь?


Сергей М.   (2008-09-11 17:18:00) [15]


> почему тогда у меня не работает?


А у меня работает.
Что я делаю неправильно ?


savyhinst   (2008-09-11 17:18:00) [16]

возвращает, но при вызове - вездесущий и вечный AccessViolation


www   (2008-09-11 17:16:00) [17]

не возвращает?


savyhinst   (2008-09-11 17:16:00) [18]

а почему тогда у меня не работает?


Palladin   (2008-09-11 17:13:00) [19]

запросто


Наверх

Титульная страница Поиск, карта сайта Написать письмо