IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   DLL (http://www.imho.ws/showthread.php?t=26047)

ReapeR 03.04.2003 16:58

DLL
 
Delphi. Я инициализирую дллку, выполняю процедуру (в длл) все работает, но как только я выполняю её по второму разу, то выдает ошибку.
В процедуру передается указатель на динамический массив, процедура его заполняет. Если включить эту процедуру в сам проект, то все работает хорошо. Как правильно вызывать процедуры и функции из ДЛЛ?

Madness 07.04.2003 22:11

ReapeR
>Как правильно вызывать процедуры и функции из ДЛЛ?
Кусок из статьи "Эксплуатационные 'режимы' использования динамически компонуемых библиотек.", кажется на delphi.mastak.ru было.
Цитата:

Статическая загрузка:

...
implementation

function ShowMyDialog(Msg: PChar): Boolean; stdcall; external 'project1.dll';
procedure SetValue(); cdecl; external 'some.dll';
...

Динамическая загрузка:

...
uses
...
type
{определяем процедурный тип, отражающий экспортируемую процедуру или функцию}
TMyProcType = procedure (flag : Boolean); stdcall;
TMyFuncType = function (Msg: PChar): Boolean; cdecl;
{эту операцию можно сделать непосредственно в разделе var процедуры, в которой вы будите загружать dll}
...
procedure TForm1.Button1Click(Sender: TObject);
var
SetValue: TMyProcType; {объявляем переменные процедурного типа}
ShowDialog: TMyFuncType;

// или можно было сделать так (в таком случае type... не нужен):
// SetValue: procedure (flag : Boolean); stdcall;
// ShowDialog: function (Msg: PChar): Boolean; cdecl;

Handle01, Handle02: HWND; {дескрипторы, загружаемых библиотек}

begin
Handle01:= LoadLibrary(PChar('project1.dll')); { загрузка dll }
try
@ShowDialog:=GetProcAddress(Handle01, 'ShowMyDialog'); { получаем указатель на необходимую процедуру}
ShowDialog(PChar('Dll function is working !!!')); { используем функцию }
except
ShowMessage('Ошибка при попытке использовать dll !');
finally
FreeLibrary(Handle01); { выгружаем dll }
end; { try }
end;
end.

Аналогично и с процедурой SetValue();

и т.д.

>как только я выполняю её по второму разу, то выдает ошибку.
Скорей всего че-нить не освобождаешь/переполняешь и т.д.

ReapeR 09.04.2003 11:42

Вложений: 1
Посмотрите пожалуста на этот код, может найдете где ошибка.


Часовой пояс GMT +4, время: 11:55.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.