![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Непонятка с var в dll`ай [D6, Win95/98, Win2k, WinXP]
hooky-mars © (2005-09-29 18:13:00)Saluer!
Создал длл проэкт в нем есть форма, которая работает как диалог, те. запрашивает у пользователя данные и возврашает результат в процесс вызвавший его
Экспортируемая функция:
functuin ....(hwnd:THandel; var srv,ndb:String):...
var CFORM:TForm1;
begin
Application.Handle:=hwnd;
CFORM:=TForm1.Create(Application.Owner);
...
if Cform.showModal = 458 then
begin
srv:=Server.Text //TEdit
ndb:=Name.Text //TEdit
end;
Cform.Free;
end;
И когда я пытаюсь после завершения функции воспользоваться переменными, которые были посланны в качестве srv,ndb то выскакивает ошибка о неверном обрашении с памятью.
За место вара использовать аут не подет.
Что можно сделать?
hooky-mars (2005-09-29 19:04:00) [1]Кстати хотелось бы знать, почему ветка переведена в начинающих? Что я тако спорозил, чтобы посчитать начинающим, и где та грань между начинающим и мастером?
hooky-mars (2005-09-29 19:02:00) [2]
> String нельза передавать в DLL, а уж var и подавно...
Про вар точно не уверен, а стринги передовал мильнон раз и ни чего.
hooky-mars (2005-09-29 19:00:00) [3]
> вара" vs "аут" - это из другой совсем оперы.
> при том что суть одинакова.
Кстати если кто не понял. Вопрос про вар что в объявлении функции:
....(hwnd:THandel; varsrv,ndb:String):...
hooky-mars (2005-09-29 18:58:00) [4]
> > Cform.showModal = 458
Какая разница что использвать mrOk или 458 (всё равно размер тотже)?
hooky-mars (2005-09-29 18:55:00) [5]
> > Cform.showModal = 458
Это то что прилшо под пальцы
> "вара" vs "аут" - это из другой совсем оперы.
> при том что суть одинакова.
По логике они должны быть разными, потому как аут предпологате полько запись в эти переменные (имею в виду внутри экспортируемой функции), а вар позволяет так же читать их (а это мне как раз и надо)
Вот более полные пример функции:
functuin ....(hwnd:THandel; var srv,ndb:String):...
var CFORM:TForm1;
begin
Application.Handle:=hwnd;
CFORM:=TForm1.Create(Application.Owner);
Server.Tex:=srv;
Name.Text:=ndb;
if Cform.showModal = 458 then
begin
srv:=Server.Text //TEdit
ndb:=Name.Text //TEdit
end;
Cform.Free;
end;
> и КАК же ты пытаешься ?
Очень просто:
...
GNC(Application.Handle,Serv,NameDB);
FreeLibrary(hdll);
Cption:=Serv+'\'+NameDB;
....
GuAV (2005-09-29 18:31:00) [6]han_malign © (29.09.05 18:18) [2]
а уж var и подавно...
С чего бы это !?
Смори хотя бы тот же windows.pas, там есть функции с var параметрами, импртируемые из dll - и ничё, работает. Для использвания ссылки не нужен менеджер памяти.
han_malign (2005-09-29 18:18:00) [7]String нельза передавать в DLL, а уж var и подавно...
У DLL и основного приложения разные менеджеры памяти - либо подключать ShareMem, либо не использовать string...
Digitman (2005-09-29 18:17:00) [8]
> Cform.showModal = 458
это что такое ?
что за велосипед ?)
> я пытаюсь после завершения функции воспользоваться переменными
и КАК же ты пытаешься ?
> За место вара использовать аут не подет
"вара" vs "аут" - это из другой совсем оперы.
при том что суть одинакова.