Главная страница
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.014 c
15-1219872645
+koha
2008-08-28 01:30
2008.10.19
Кто занимается параллельными машинами подскажите


1-1200907741
Ангела
2008-01-21 12:29
2008.10.19
Подскажите по экспорту, пожалуйста


15-1217317704
Пробежал...
2008-07-29 11:48
2008.10.19
Firebird Embedded vs SQLite


2-1221132574
DMX
2008-09-11 15:29
2008.10.19
Уникальная строка


1-1200679747
ilkz
2008-01-18 21:09
2008.10.19
Приложение и DLL