Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DLL [D6, WinXP]


Страницы:   1 2

Konsul ©   (2004-08-02 08:53:00) 

Здравствуйте, уважаемые мастера!
У меня возникла такая проблема, с которй сталкивается, наверное, каждый начинающий в области dll.
Проблема вот в чём. Задаю в dll функцию, возвращающую значение string. Сама программа работает с dll следующим образом:
задаём переменные:
type TGetStr=function: string; stdcall;
var
Hinst: THandle;
FPointer: TFarProc;
GetStr: TGetStr;
s: string;


Затем выполняем слeдующие действия:
HInst:=LoadLibrary(PChar('test_dll.dll'));
if HInst<=0 then begin messagedlg('DLL глючит!',mtError,[mbOk],0); exit; end;
FPointer:=GetProcAddress(Hinst,PChar('GetStr'));
if FPointer<>nil then
begin
GetStr:=TGetStr(FPointer);
s:=GetStr;
end;


если в самой dll возвращяемое значение задать прямым значением или переменой, относящейся к данной функции, т.е.

function GetStr: string; stdcall;
begin
result:='Test string!';
end;


то прога получает это значение, но потом пишет ошибку EInvalidPointer with message "Invalid Pointer operation". Но если задать result так:

function GetStr: string; stdcall;
begin
result:=s;
end;


где s - более глобальная переменна, значение которой задаётся какой-либо другой процедурой, то никаких ошибок нет. Странно!...
Мастера, помогите разобраться, в чём дело! Заранее благодарен!


Думкин   (2004-08-02 09:00:00) [21]

А ты пробовал читать комментарий вверху dll, когда был создан ее юнит. Он не только для красоты.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо