DLL in Delphi
8 отговора
265 прегледа
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...
Ako niakoi mi dade primer kak se pravi 6te sum mnogo blagodaren...
Primer
[линк]
------------------------------
I got a COMPILER, and I'm not afraid to use it!
------------------------------
I got a COMPILER, and I'm not afraid to use it!
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?
Най-просто 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?
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????
Molia te dai ideia, kakvo tribva da sloja v uses.... ili ne6to takova
kvo be6e tva compile????
Re: Primer
Нищо не трябва да слагаш в uses.
Функциите от DLL-а можеш да ги ползваш по два начина - като заредиш самия DLL run-time с LoadLibrary (както е в примерчето на SDR) или да си декларираш функциите като:
function sqr_func(n: Integer): Integer; external 'FirstDLL.dll';
и после си я викаш като нормална функция от твойта програма.
При втория начин обаче DLL-а трябва да ти е при exe-то, в системната директория на Windows или в пътя за търсене, иначе програмата ти изобщо няма да тръгне
Функциите от DLL-а можеш да ги ползваш по два начина - като заредиш самия DLL run-time с LoadLibrary (както е в примерчето на SDR) или да си декларираш функциите като:
function sqr_func(n: Integer): Integer; external 'FirstDLL.dll';
и после си я викаш като нормална функция от твойта програма.
При втория начин обаче DLL-а трябва да ти е при exe-то, в системната директория на Windows или в пътя за търсене, иначе програмата ти изобщо няма да тръгне
Re: Primer
[линк] i w chastnost u_sslwrapper.pas
------------------------------
I got a COMPILER, and I'm not afraid to use it!
------------------------------
I got a COMPILER, and I'm not afraid to use it!
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.
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.
Re: Primer
function sqr_func (N: Integer): Integer; stdcall; external 'test.dll';
Не всичко което виси е Windows, но той най-често го прави !!!
Не всичко което виси е Windows, но той най-често го прави !!!