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

Вниз

Вопрос про DLL   Найти похожие ветки 

 
savyhinst ©   (2008-09-11 17:12) [0]

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


 
Palladin ©   (2008-09-11 17:13) [1]

запросто


 
savyhinst ©   (2008-09-11 17:16) [2]

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


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

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


 
savyhinst ©   (2008-09-11 17:18) [4]

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


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


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


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


 
stas ©   (2008-09-11 17:18) [6]

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


 
savyhinst ©   (2008-09-11 17:19) [7]

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


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


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


Эт точно)


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


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


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


 
savyhinst ©   (2008-09-11 17:25) [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


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

Как быть?


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


> Как быть?


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


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


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


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


 
savyhinst ©   (2008-09-11 17:40) [14]

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


 
savyhinst ©   (2008-09-11 17:41) [15]

да, я в курсе


 
savyhinst ©   (2008-09-11 17:43) [16]

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

var
hp:THPlugin;

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

так?


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


> я в курсе


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


 
savyhinst ©   (2008-09-11 17:44) [18]

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


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


> так?


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



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

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

Наверх




Память: 0.51 MB
Время: 0.011 c
15-1220009009
wl
2008-08-29 15:23
2008.10.19
компиляция под cygwin


15-1216905772
diploDocs
2008-07-24 17:22
2008.10.19
Два сюрприза Microsoft


2-1221116374
vegarulez
2008-09-11 10:59
2008.10.19
Как маскировать символ находящийся в текстовой строке?


2-1221084613
demon
2008-09-11 02:10
2008.10.19
Как загрусить html файл?


11-1194295636
Elec3C
2007-11-05 23:47
2008.10.19
Вопрос по OpenSaveDialog у