18/07/2010



No Windows temos dois tipos de arquivos executáveis: os Programas e as DLLs. Quando escrevemos uma aplicação em Delphi, normalmente é geramos um programa (.exe). Esses nossos aplicativos, na grande maioria das vezes, usam chamadas de procedimentos e/ou funções armazenadas em DLLs. Por exemplo: quando usamos uma API do Windows diretamente, estamos de fato acessando uma DLL.

O Delphi, como poderosa ferramenta de desenvolvimento que é, também pode gerar DLLs puras e isso não é tão complicado assim, entretanto alguns cuidados devem ser seguidos, pois escrever uma DLL no Windows também não é tão simples quando alguns falam, pois a DLL e o programa que a chama precisam estar de acordo com as convenções de chamada.
Diferenças entre DLLs e EXE
De maneira geral a estrutura de um arquivo EXE e de um arquivo DLL é a mesma, apenas quando uma DLL é carregada na memória que as coisas começas a mudar. A principal diferença entre os programas e as DLLs é que uma DLL não é um programa em execução, é apenas um conjunto de procedimentos e/ou funções que outros programas podem chamar e executar. Uma outra diferença é que as DLLs não criam uma pilha para elas, usam a pilha do programa que a chamou.
Vantagens das DLLs
Quando programas diferentes usam a mesma DLL, essa DLL é carregada na memória apenas uma vez, economizando memória. As DLLs são mapeadas no espaço de endereço privativo de cada processo, mas seu código é carregado na memória apenas uma vez.
Você pode fornecer uma versão diferente de uma DLL, substituindo a atual. Se as sub-rotinas da DLL têm os mesmos parâmetros, você pode executar o programa com a nova versão da DLL sem ter que compilá-la. Se a DLL tem novas sub-rotinas, isso não importa. Podem surgir problemas apenas se uma rotina na versão mais antiga da DLL estiver faltando na nova.
[ Fonte ]
Regras para escrever uma DLL no Delphi
Como falamos na coluna anterior, escrever DLL não é nada do outro mundo, no entanto é preciso seguir algumas regras para que tudo funcione corretamente com a DLL e o programa que a utiliza. As funções e/ou procedimentos de DLL devem seguir estas regras:
" Precisam estar listados na cláusula exports da DLL. Isso possibilita que os programas chamadores enxerguem a rotina;
" As funções exportadas precisam ser declaradas como stdcall;
" Os tipos de parâmetros de uma DLL devem ser de tipos padrão do Windows, pelo menos se você quiser usar a DLL dentro de outros ambientes de desenvolvimento, como por exemplo, C++.
" Uma DLL pode usar dados globais que não serão compartilhadas pelos programas chamadores. Sempre que um aplicativo carrega uma DLL, ele armazena os dados globais da DLL em seu próprio espaço de endereço.
Criando uma DLL no Delphi
Como você já sabe, podemos usar o Delphi para construir DLLs que podem ser utilizadas por programas escritos em Delphi ou qualquer outra linguagem que ofereça suporte a DLLs. Construir DLLs no Delphi é muito simples, contudo esse recurso não deve ser utilizados em demasia. Em geral, sugerimos que você tente construir componentes e pacotes em vez de DLLs. Os pacotes podem conter componentes, mas também classes em geral, permitindo que você escreva código orientado a objetos e o reutilize eficientemente. Colocar um conjunto de funções em uma DLL é uma estratégia mais tradicional da programação.
Dando início ao desenvolvimento de DLLs no Delphi, vamos mostrar a você uma biblioteca bem simples. O principal objetivo desse exemplo é mostrar a sintaxe utilizada para definir uma DLL no Delphi. Para começar, selecione o comando File/New, escolha a opção DLL na página New do Object Repository. Isso cria um arquivo-fonte muito simples.
Aqui está código fonte da nossa primeira DLL:
library MinhaDll;
uses
SysUtils,
Classes;
{$R *.res}
function Triple(N: Integer): Integer; stdcall;
begin
Result := N * 3;
end;
function Double (N: Integer): Integer; stdcall;
begin
Result := N * 2;
end;
exports
Triple, Double;
end.
[ Fonte ]
Chamando Uma dele a partir de um aplicativo em Delphi
Para fazer um formulário usando nossa DLL vamos abrir o Delphi e criar uma nova aplicação. Colocar dois Edits e dois Buttons, no evento OnClick dos botões faremos as chamadas das funções. Para chamar um função de uma DLL é preciso apenas declarar as funções de forma igual a declarada na dll, ou seja, nome, parâmetros e tipos.
Vejamos a seguir o código completo da nossa aplicação:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{funções da DLL Delphi}
function Double (N: Integer): Integer;stdcall; external 'MINHADLL.DLL';
function Triple (N: Integer): Integer;stdcall; external 'MINHADLL.DLL';
procedure TForm1.Button1Click(Sender: TObject);var x, y: integer;begin
x := StrToInt(Edit1.Text);
y := Double(x);
Edit1.Text := IntToStr(y);
end;
procedure TForm1.Button2Click(Sender: TObject);var x, y: integer;begin
x := StrToInt(Edit2.Text);
y := Triple(x);
Edit2.Text := IntToStr(y);
end;
end.
[ Fonte ]

0 comentários:

Postar um comentário