Ir em baixo
_Netrunner
_Netrunner

Mensagens : 156
Pontos : 564

[Tutorial]Dynamic-link library [DLL's] Empty [Tutorial]Dynamic-link library [DLL's]

em Dom 20 Jan 2013 - 18:55
Reputação da mensagem: 100% (2 votos)
Vou dar uma breve explicação oque é .DLL.

Dynamic-link library (biblioteca de vínculo dinâmico) ou DLL, é a implementação feita pela Microsoft para o conceito de bibliotecas compartilhadas nos sistemas operacionais Microsoft Windows e OS/2. Essas bibliotecas geralmente tem as extensões DLL, OCX (para bibliotecas que contêm controles ActiveX), ou DRV (para drivers de sistema legados).
Os formatos de arquivos para DLL são os mesmos dos arquivos executáveis para Windows. Assim como os executáveis (EXE), as DLL podem conter códigos, dados, e recursos (ícones, fontes, cursores, entre outros) em qualquer combinação.
No sentido amplo do termo, qualquer arquivo de dados com esse mesmo formato pode ser chamado de DLL de recursos. Exemplos dessas DLL incluem bibliotecas de ícones, podendo ter a extensão ICL, e os arquivos de fontes, quem têm as extensões FON e FOT.

Ligação explícita em tempo de execução.

Arquivos DLL podem ser carregados explicitamente em tempo de execução, um processo chamado pela Microsoft como ligação dinâmica em tempo de execução, utilizando a função LoadLibrary (ou LoadLibraryEx) de sua API. A função GetProcAddress é usada para buscar por nome dos símbolos exportados, e a FreeLibrary — para descarregar a DLL. Essas funções são análogas às dlopen, dlsym, e dlclose na API padrão do POSIX.
Note que com a ligação implícita em tempo de execução, chamada pela Microsoft como ligação dinâmica em tempo de carregamento, se o arquivo DLL não for encontrado, o Windows mostrará uma mensagem de erro e não carregará o aplicativo. O desenvolvedor não tem maneiras de tratar a ausência de arquivos DLL ligados implicitamente pelo ligador em tempo de compilação. Por outro lado, com a ligação explícita em tempo de execução, os desenvolvedores tem a oportunidade de criar um tratamento para esse tipo de exceção.
A rotina de ligação explícita em tempo de execução é a mesma em qualquer linguagem, pois ela depende da API do Windows e não dos construtores das linguagens.

DLL no Delphi.

No cabeçalho do código fonte, a palavra reservada library no lugar de program. No fim do arquivo, as funções a serem exportadas são listadas na cláusula exports.
O Delphi não requer que os arquivos LIB importem funções de DLL. Para fazer uma ligação a uma DLL, a palavra reservada external é usada na declaração da função.


Criando DLL:
Os exemplos seguintes mostram as maneiras específicas de exportação de DLL.

library Exemplo;

// Função que soma 2 números
function SomaNumeros(a, b: Double): Double; cdecl;
begin
SomaNumeros := a + b
end;

// Exporta esta função
exports
SomaNumeros;

// código de inicialização da DLL: nenhuma função especial é necessária
begin
end.

Importação para o Projeto [.EXE] [Formulário 1]

Código:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls; //declarando as users

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Usuario: TEdit;
    Senha: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


  Procedure SucessoLogin; External 'login.dll'; //Pegando a Procedure de Mensagem do login com sucesso
  Procedure ErronoLogin; External 'login.dll'; //Pegando a Procedure de Mensagem de Error no Login.

implementation //Implementação

uses Unit2; //Formulário 2 será aberto apos o login com a Procedure Sucesso no Login [Login Correto]

{$R *.dfm}

//Código do Button Logar :

procedure TForm1.Button1Click(Sender: TObject);
begin
if (usuario.Text='bgames') and (senha.Text='netrunner') then //Se o Usuário não for igual a bgames a senha não for igual a netrunner

begin //então vai chamar a procedure da .dll [Sucesso no Login]
Sucessologin;

form2.show; //Abrindo Formulário 2 [Sucesso no Login]
form1.Hide; //Escondendo Formulário 1 [Sucesso no Login]

end//fim

else //se não ele vai chamar a procedure ErronoLogin [Falha ao Logar]
ErronoLogin;

end; //fim
end.

Importação para o Projeto [.EXE] [Formulário 2]

Código:
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Panel1: TPanel;
    palavra: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    resultado: TEdit;
    Panel2: TPanel;
    Label3: TLabel;
    gerar: TEdit;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  Function GerarSenha(aQuant: integer):ShortString ; Export ; stdcall //Declarando a função GerarSenha da .DLL na var.

  function md5(const Input: String):ShortString; Export ; stdcall; //Declarando a função MD5 da .DLL no var.

implementation //Implementação

function GerarSenha(aQuant: integer):ShortString ;External 'login.dll'; //Pegando a função GerarSenha da nossa .dll que é a login.dll

function md5(const Input: String):ShortString; External 'login.dll'; //Pegando a função MD5 da nossa .dll que é a login.dll

{$R *.dfm}


procedure TForm2.Button2Click(Sender: TObject); //Quando o button de GerarSenha for clicado [Evento]
begin
gerar.Text:= gerarsenha(10); //O Campo de texto do gerar senha será igual a função GerarSenha com a quantidade de letras/números/símbolos desejado da nossa .dll {10}.

end; //fim do evento.

procedure TForm2.Button1Click(Sender: TObject); //Usando a função MD5 do login.dll.
begin
resultado.Text:= md5(palavra.Text); // O Campo de Resultado será igual a função MD5 criptografando o campo de palavra a ser digitada.

end; //fim do evento.

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
application.Terminate; //Quando o Formulário 2 for fechado a aplicação será desligada.
end;

end.





Fiz um exemplo de dll no Delphi 7, usando os componente original do próprio Delphi para permitir o estudo de todos.

Funções :
Sistema de Login no .EXE , onde suas mensagem de error e sucesso é tudo redirecionado na dll!
Função de crypt de palavras em MD5.
Função de Gerador de Senha Random.


Imagens :

[Você precisa estar registrado e conectado para ver esta imagem.]
[Você precisa estar registrado e conectado para ver esta imagem.]
[Você precisa estar registrado e conectado para ver esta imagem.]

Download :
[Você precisa estar registrado e conectado para ver esta imagem.]

Obs : Proibido copiar post sem seus devidos créditos.


Créditos Explicação :
Wikipédia

Créditos Exemplo : _Netrunner


Última edição por _Netrunner em Ter 22 Jan 2013 - 8:39, editado 4 vez(es)
BGames
BGames

Mensagens : 1808
Pontos : 16497
Evolução : 100
[Tutorial]Dynamic-link library [DLL's] Reputation_highpos[Tutorial]Dynamic-link library [DLL's] Reputation_highpos[Tutorial]Dynamic-link library [DLL's] Reputation_highpos[Tutorial]Dynamic-link library [DLL's] Reputation_highpos[Tutorial]Dynamic-link library [DLL's] Reputation_highpos[Tutorial]Dynamic-link library [DLL's] Reputation_highpos[Tutorial]Dynamic-link library [DLL's] Reputation_highpos[Tutorial]Dynamic-link library [DLL's] Reputation_highpos[Tutorial]Dynamic-link library [DLL's] Reputation_highpos[Tutorial]Dynamic-link library [DLL's] Reputation_highpos

[Tutorial]Dynamic-link library [DLL's] Empty Re: [Tutorial]Dynamic-link library [DLL's]

em Seg 21 Jan 2013 - 15:50
Muito bom cara... Eu vou postar um de dll em C# mais pra frente..
É um pouco diferente do Delphi...
Coloca ae como importa pra dentro do projeto :DD
Kozzie
Kozzie

Mensagens : 1350
Pontos : 5077
Evolução : 4
[Tutorial]Dynamic-link library [DLL's] Reputation_highpos

[Tutorial]Dynamic-link library [DLL's] Empty Re: [Tutorial]Dynamic-link library [DLL's]

em Seg 21 Jan 2013 - 16:12
Netrunner, que tema é esse ?*-*

Parabéns, vou está dando uma olhada...

comoseeusoube-sedealgumacoisa [Tutorial]Dynamic-link library [DLL's] 901768235
_Netrunner
_Netrunner

Mensagens : 156
Pontos : 564

[Tutorial]Dynamic-link library [DLL's] Empty Re: [Tutorial]Dynamic-link library [DLL's]

em Ter 22 Jan 2013 - 8:16
Esse tema é o Radiance.
Depois irei colocar alguns temas "dahora" em offtopic e também tutoriais de como instalar.
Conteúdo patrocinado

[Tutorial]Dynamic-link library [DLL's] Empty Re: [Tutorial]Dynamic-link library [DLL's]

Voltar ao Topo
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum