DLL in Delphi

8 отговора 265 прегледа
#1

DLL in Delphi

Moje da vi zvu4i mnogo tupo, oba4e ne6to ne se spraviam s napisvane na dll.
Ako niakoi mi dade primer kak se pravi 6te sum mnogo blagodaren...

Отговор
в отговор на Gele #2

Primer

[линк]

------------------------------
I got a COMPILER, and I'm not afraid to use it!
Отговор
в отговор на SDR #3

Re: Primer

Ама и ти едно просто примерче си му дал на човека - направо от раз да го разбере
Най-просто DLL се прави така:

library Firstdll;

function sqr_func (N: Integer): Integer; stdcall;
begin
Result := N * N;
end;

exports
sqr_func;

end.

В частта exports пишеш нещата, които искаш да са видими за външния свят.
Трябва да внимаваш да нямаш параметри от тип String или динамични масиви и разни такива. Ако можеш го избягвай. Ако не - трябва да си uses-неш на първо място ShareMem. Знаеш ли после как да си викаш функциите от DLL-a?

Отговор
в отговор на andrew_nikoloff #4

Re: Primer

To4no tova mi e problemа, оt primera na SDR mi e mnogo trudno da razbera kak stava toi polzva loadLibrary.....
Molia te dai ideia, kakvo tribva da sloja v uses.... ili ne6to takova

kvo be6e tva compile????
Отговор
в отговор на Gele_ #5

Re: Primer

Нищо не трябва да слагаш в uses.
Функциите от DLL-а можеш да ги ползваш по два начина - като заредиш самия DLL run-time с LoadLibrary (както е в примерчето на SDR) или да си декларираш функциите като:

function sqr_func(n: Integer): Integer; external 'FirstDLL.dll';

и после си я викаш като нормална функция от твойта програма.

При втория начин обаче DLL-а трябва да ти е при exe-то, в системната директория на Windows или в пътя за търсене, иначе програмата ти изобщо няма да тръгне

Отговор
в отговор на Gele_ #6

Re: Primer

[линк] i w chastnost u_sslwrapper.pas

------------------------------
I got a COMPILER, and I'm not afraid to use it!
Отговор
в отговор на SDR #7

Re: Primer

pravia:

unit exe_unit;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }

end;

var
Form1: TForm1;
function sqr_func (N: Integer): Integer; external 'test.dll';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

showmessage(inttostr(sqr_func(3)));
end;

end.

resultata e -214296176 i posle gre6ka: access violation??????? - tova e v runtime

DLL-a e tova:

library test;

function sqr_func (N: Integer): Integer; stdcall;
begin
if N > 0 then
Result := N * N
else
result:=0;
end;

exports
sqr_func;

end.

Отговор
в отговор на Gele #8

Re: Primer

function sqr_func (N: Integer): Integer; stdcall; external 'test.dll';

Не всичко което виси е Windows, но той най-често го прави !!!
Отговор