quinta-feira, 23 de agosto de 2012

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:



É isso ai galera, esse é o básico sobre DLLs utilizando o Delphi.
Até a próxima.



Um comentário:

  1. Pedro Henrique25.8.12

    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.
    De qualquer forma vlws por postar.

    ResponderExcluir