Текущий архив: 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.48 MB
Время: 0.006 c