DLL ou Dynamic-Link Library é o nome que se dá á bibliotecas externas. Você já deve ter visto aplicações que utilizam diversas bibliotecas dessas, e hoje, vou falar um pouco mais sobre elas.
As DLLs podem conter funções e rotinas para qualquer aplicação. Isso facilita quando se trata de uma aplicação grande, e além de tudo, colocar as rotinas em DLLs economizam o espaço em disco e também a memória RAM em Runtime.
Além do mais, qualquer aplicação pode acessar as rotinas da DLLs.
Para criar uma DLL, abra o Delphi e clique em File>New>Other selecione a categoria Delphi Projects e Dynamic-link Library.
Para criarmos alguma função ou rotina na DLL, podemos escreve-la acima do bloco begin-end. Ex:
library minhaDLL;
uses
System.SysUtils,
System.Classes;
{$R *.res}
function Calcular(valor1: Real; operador: Char; valor2: Real): Real;
var
resultado: Real; // variavel de retorno
begin
case operador of
'+': resultado := valor1 + valor2; // soma
'-': resultado := valor1 - valor2; // subtração
'*': resultado := valor1 * valor2; // multiplicação
'/': resultado := valor1 / valor2; // divisão
end;
result := resultado; // retorna resultado
end;
begin
end.
Além de termos a rotina, ela ainda não pode ser usada pela aplicação. Para isso, temos que exporta-la, colocando a função na lista de exportação ainda acima do bloco begin-end.
exports
Calcular;
Agora sim, a rotina foi exportada, porém podemos apenas utiliza-la em aplicações Delphi. Se quisermos utiliza-la em outras linguagens de programação, devemos marca-la com a diretiva stdcall.
function Calcular(valor1: Real; operador: Char; valor2: Real): Real; stdcall;
O modo mais simples para carregar uma DLL em sua aplicação, é o de carga estática. Para carregarmos ela em nossa aplicação, devemos declarar a função que queremos importar na diretiva interface e mostrar o arquivo da DLL na diretiva implementation.
Dessa forma, crie uma nova aplicação e adicione uma nova unidade. (File>New>Unit).
unit funcoesDLL;
interface
function Calcular(valor1: Real; operador: Char; valor2: Real): Real; stdcall;
implementation
function Calcular; external 'minhaDLL.dll';
end.
Repare que, declaramos a função que está na DLL e na implementation mostramos onde está a função.
É possível importar a função com outro nome, desde que você mostra o nome da função depois.
function FazContas(valor1: Real; operador: Char; valor2: Real): Real; stdcall; external 'minhaDLL.dll'; name 'Calcular';
Eu salvei a unit como funcoesDLL.pas, para que possamos importar em nossa aplicação.
Crie uma nova aplicação, e na uses, adicione a unit funcoesDLL da qual acabamos de salvar.
Agora basta chamar a função, desde que a uses funcoesDLL esteja importada.
procedure TForm2.Button1Click(Sender: TObject);
begin
ShowMessage(FloatToStr(Calcular(10, '+', 10)));
end;
Eis o resultado:
As DLLs podem conter funções e rotinas para qualquer aplicação. Isso facilita quando se trata de uma aplicação grande, e além de tudo, colocar as rotinas em DLLs economizam o espaço em disco e também a memória RAM em Runtime.
Além do mais, qualquer aplicação pode acessar as rotinas da DLLs.
Para criar uma DLL, abra o Delphi e clique em File>New>Other selecione a categoria Delphi Projects e Dynamic-link Library.
Para criarmos alguma função ou rotina na DLL, podemos escreve-la acima do bloco begin-end. Ex:
library minhaDLL;
uses
System.SysUtils,
System.Classes;
{$R *.res}
function Calcular(valor1: Real; operador: Char; valor2: Real): Real;
var
resultado: Real; // variavel de retorno
begin
case operador of
'+': resultado := valor1 + valor2; // soma
'-': resultado := valor1 - valor2; // subtração
'*': resultado := valor1 * valor2; // multiplicação
'/': resultado := valor1 / valor2; // divisão
end;
result := resultado; // retorna resultado
end;
begin
end.
Além de termos a rotina, ela ainda não pode ser usada pela aplicação. Para isso, temos que exporta-la, colocando a função na lista de exportação ainda acima do bloco begin-end.
exports
Calcular;
Agora sim, a rotina foi exportada, porém podemos apenas utiliza-la em aplicações Delphi. Se quisermos utiliza-la em outras linguagens de programação, devemos marca-la com a diretiva stdcall.
function Calcular(valor1: Real; operador: Char; valor2: Real): Real; stdcall;
O modo mais simples para carregar uma DLL em sua aplicação, é o de carga estática. Para carregarmos ela em nossa aplicação, devemos declarar a função que queremos importar na diretiva interface e mostrar o arquivo da DLL na diretiva implementation.
Dessa forma, crie uma nova aplicação e adicione uma nova unidade. (File>New>Unit).
unit funcoesDLL;
interface
function Calcular(valor1: Real; operador: Char; valor2: Real): Real; stdcall;
implementation
function Calcular; external 'minhaDLL.dll';
end.
Repare que, declaramos a função que está na DLL e na implementation mostramos onde está a função.
É possível importar a função com outro nome, desde que você mostra o nome da função depois.
function FazContas(valor1: Real; operador: Char; valor2: Real): Real; stdcall; external 'minhaDLL.dll'; name 'Calcular';
Eu salvei a unit como funcoesDLL.pas, para que possamos importar em nossa aplicação.
Crie uma nova aplicação, e na uses, adicione a unit funcoesDLL da qual acabamos de salvar.
Agora basta chamar a função, desde que a uses funcoesDLL esteja importada.
procedure TForm2.Button1Click(Sender: TObject);
begin
ShowMessage(FloatToStr(Calcular(10, '+', 10)));
end;
Eis o resultado:
É isso ai galera, esse é o básico sobre DLLs utilizando o Delphi.
Até a próxima.
Muito legal, eu "brinco" um pouco com C++, e DLLs sempre me chamaram a atenção, no caso de C++ tem algumas modificações na hora de exportar , além da sintaxe da linguagem em si.
ResponderExcluirDe qualquer forma vlws por postar.