Главная страница
    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.48 MB
Время: 0.006 c
2-1221073858
Alral
2008-09-10 23:10
2008.10.19
TBitmap.Transparent


2-1220965041
ReYo
2008-09-09 16:57
2008.10.19
Тип double


8-1187125306
Dr. Andrew
2007-08-15 01:01
2008.10.19
Где можно найти encoder-decoder для ogg файлов?


15-1219907118
tesseract
2008-08-28 11:05
2008.10.19
Чего-то все про Абрамова забыли


2-1221035629
programmer90
2008-09-10 12:33
2008.10.19
Проблемы с кодировкой.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский