Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.31;
Скачать: CL | DM;

Вниз

Работа с Dll   Найти похожие ветки 

 
Salvator ©   (2003-07-17 22:38) [0]

Мастера, подскажите. Работаю с Dll, если загружаю ее динамически, то она не работает.
Пример динамической загрузки:

var
Form1: TForm1;
Path:Function(i:integer):PChar;
LibHandle: THandle;

procedure TForm1.Button1Click(Sender: TObject);
begin
@Path := nil;
LibHandle := LoadLibrary("Functions.DLL");
if LibHandle >= 32 then
begin
@Path := GetProcAddress(LibHandle,"Path");
if @Path <> nil then
Edit3.Text:=String(Path(StrToInt(Edit1.Text)));
end;
FreeLibrary(LibHandle);
end;

А если загружаю статически:

Function Path(i:integer):PChar;stdcall;external "Functions";

то все нормально. В чем может быть проблема?


 
panov ©   (2003-07-17 22:43) [1]

var
Form1: TForm1;
Path:Function(i:integer):PChar; stdcall;
...


 
AbrosimovA ©   (2003-07-18 08:25) [2]

Всё приведенное ниже работало великолепно и возможно важно будет как пример. В DLL у меня спрятано модальное окошко "О программе", которое я вызывал нажатием на кнопку меню.

Динамический вызов DLL у себя я делал так:

unit Pro;

interface

uses .....

type TAboutD=function: boolean;

type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
procedure N1Click(Sender: TObject);

private
DLLHandle: THandle;
ExternalFunctionAboutD: TAboutD;
public
end;

var
Form1: TForm1;
AboutDLL: boolean;

procedure TForm1.N1Click(Sender: TObject);
begin
DLLHandle:=LoadLibrary("DialogDLL.dll");
try
@ExternalFunctionAboutD:=GetProcAddress(DLLHandle,
PChar("AboutD"));
AboutDLL:=AboutD;
finally
FreeLibrary(DLLHandle);
end;
end;


А сама DLL выглядела следующим образом:

library DialogDLL;

uses
SysUtils,
Classes,
About in "About.pas" {AboutBox};

{$R *.res}


exports AboutD;

begin
end.

unit About;

interface

uses ......;

type
TAboutBox = class(TForm)
.
.
.

private
{ Private declarations }
public
{ Public declarations }
end;

var
AboutBox: TAboutBox;
function AboutD: boolean;

implementation

{$R *.dfm}

function AboutD: boolean;
begin
AboutBox := TAboutBox.Create(Application);
AboutBox.ShowModal;
end;



 
KSergey ©   (2003-07-18 09:08) [3]

AbrosimovA © (18.07.03 08:25)

Вам, конечно, "повезло", однако же (как верно упомянул panov © (17.07.03 22:43)) стоит написать так, и не забывать об этом всегда:

type TAboutD=function: boolean; stdcall;

function AboutD: boolean; stdcall;



Страницы: 1 вся ветка

Текущий архив: 2003.07.31;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.016 c
1-100797
ruslan_as
2003-07-16 17:45
2003.07.31
Как открыть файл Acrobat Reader с паролем


1-100821
Zilog
2003-07-17 16:28
2003.07.31
КАК: нужно дату 17.07.2003 преобразовать в 2003/07/17


14-100919
zolotov
2003-07-14 19:19
2003.07.31
Как переводится слово Enhanced?


1-100789
cjiohobaji
2003-07-17 07:20
2003.07.31
таймер


1-100727
Navi
2003-07-19 08:06
2003.07.31
Новый шрифт в компоненте