Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.10.19;
Скачать: [xml.tar.bz2];

Вниз

Вопрос про 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.005 c
15-1219823314
Darvin
2008-08-27 11:48
2008.10.19
Эффекты на висте. Какие будут мнения?


2-1221228662
webpauk
2008-09-12 18:11
2008.10.19
scrollbox.clientrect


9-1174711886
beginerProger
2007-03-24 07:51
2008.10.19
Проблема с класом движка


15-1219762713
ChaosAD
2008-08-26 18:58
2008.10.19
Что почитать по Хранимым Процедурам для MSSQL


15-1219907118
tesseract
2008-08-28 11:05
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский