Neste capítulo discutiremos o que é uma DLL, seus aspectos e tipos e ainda, porquê é tão importante para as aplicações Windows



Documentos relacionados
Evitando conflitos em aplicações multi-thread no Delphi/Kylix

Estrutura, Processos e Threads

Adicionando Propriedades e Funcionalidades aos Componentes Parte II

PROJECT 1 Delphi Project (Extensão. DPR)

MÓDULOS GAVETEIROS MGI-20/MGI-40 AC MGI 2000 AC. Manual de Instruções

1.6. Tratamento de Exceções

AMBIENTE. FORMULÁRIO: é a janela do aplicativo apresentada ao usuário. Considere o formulário como a sua prancheta de trabalho.

vb Inno Script Conversor

Sistemas Operacionais

Interface para Regras de Negócios em Multi-Banco

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Sistemas Operacionais

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

SISTEMAS OPERACIONAIS

DIFERENÇAS ENTRE FUNÇÃO E BLOCO FUNCIONAL; CRIAÇÃO DE FUNÇÃO / BLOCO FUNCIONAL; UTILIZAÇÃO NO LADDER; EXEMPLO DE BLOCO FUNCIONAL;

Procedimentos para Reinstalação do Sisloc

Framework InterLattes Construção de Módulos. Marcelo Domingos

END OF FILE: Tutorial Chat Em Delphi

Padrões de Projeto. Singleton

Delphi IDE. Jocélio Passos Delphi - IDE. Integrad Development Enviroment Ambiente de Desenvolvimento Integrado

Orientação a Objetos

Manual Captura S_Line

Sistemas Operacionais

ECD1200 Equipamento de Consulta de Dados KIT DE DESENVOLVIMENTO

A multimídia para ambiente Windows foi desenvolvida a poucos anos atrás e hoje é lugar comum, nesta seção discutimos alguns itens genéricos.

Notas da Aula 17 - Fundamentos de Sistemas Operacionais

Manual do PolicyKit-kde. Daniel Nicoletti Tradução: Luiz Fernando Ranghetti

A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande

Autor: Tiago Lone Nível: Básico Criação: 19/12/2005 Última versão: 18/12/2006. PdP. Pesquisa e Desenvolvimento de Produtos

Display de 7. PdP. Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

Procedimentos para Instalação do SISLOC

Desenvolvimento de uma interface para uma biblioteca open-source de algoritmos de programação linear

Procedimentos para Instalação do Sisloc

Utilizando bibliotecas externas

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

SEGURANÇA DO WINDOWS Análise sobre as APIs. Por: Fergo

Especificação do 3º Trabalho

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

Plugins TerraView. Última revisão: 12/12/32006 Versão TerraLib: 3.1.4

Config. do módulo MSA com dispositivos REP.

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Arquitetura de Computadores. Sistemas Operacionais IV

MANUAL DO ADMINISTRADOR LOCAL. Entidade Municipal

Estruturando um aplicativo

Podemos agora ver no IDE do Morfik os objetos que já incorporamos ao nosso projeto :

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0

Introdução a Java. Hélder Nunes

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

Gerenciamento de Arquivos e Pastas. Professor: Jeferson Machado Cordini jmcordini@hotmail.com

Manual do usuário. Softcall Java. versão 1.0.5

ArpPrintServer. Sistema de Gerenciamento de Impressão By Netsource Rev: 02

Listas Site Secretaria Site Secretaria A imagem a seguir ilustra a diagramação do Site da Secretaria:

Curso de Aprendizado Industrial Desenvolvedor WEB

PdP. Autor: Luís Fernando Patsko e Tiago Lone Nível: Intermediário Criação: 26/12/2005 Última versão: 18/12/2006

ROTINAS PADRÕES DO SISTEMAS

Roteiro 2: (Planilhas Eletrônicas) - Função procv / manipulação de formulários

4 Estrutura do Sistema Operacional Kernel

1. TSA Inovação - TSA DT_Arquivo_de_Log_do_Integrador_Separado_por_Thread DT_Central_de_Ajuda_UX9...

3 SCS: Sistema de Componentes de Software

Impressão de Código de Barras Uma abordagem prática ZEBRA ZPL2

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES I PROFESSOR RAFAEL BARRETO

Ferramenta de Análise Código Fonte em Delphi. Aluno - Roque César Possamai Orientador - Everaldo Artur Grahl

ÍNDICE. 1. Introdução O que é o Sistema Mo Porã Como acessar o Site Mo Porã Cadastro do Sistema Mo Porã...

Levantamento de Requisitos

Índice: Nitgen do Brasil

Sistemas Operacionais

Programação para Dispositivos Móveis

Feature-Driven Development

BEM-VINDO AO dhl PROVIEW

Filas. A ordem de saída corresponde diretamente à ordem de entrada dos elementos. Fila de caixa bancário

ARQUITECTURA DE COMPUTADORES CAPÍTULO II AULA X

Sistemas Operacionais

A Linguagem Pascal e o Ambiente de Programação Dev-Pascal. Introdução à Ciência da Computação I

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Manual do Painel Administrativo

SquidCacheAux para BrazilFW

Como Gerar documento em PDF com várias Imagens

GUIA INTEGRA SERVICES E STATUS MONITOR

Algoritmos e Programação Estruturada

Entradas Digitais. PdP. Autores: Luís Fernando Patsko e Tiago Lone Nível: Intermediário Criação: 27/12/2005 Última versão: 18/12/2006

DIRETÓRIOS. Diretórios ZIM. Estabelecer um diretório de aplicativo. Campos do objeto Diretórios. Diretórios estrangeiros. Zim 8.

ROTEIRO PARA TREINAMENTO DO SAGRES DIÁRIO Guia do Docente

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Tutorial para envio de comunicados e SMS

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

Manual de Atualização Versão

Disciplina: Sistemas Operacionais - CAFW-UFSM Professor: Roberto Franciscatto

Índice. Tutorial para Desenvolvimento de Conduits em Delphi

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo.

Manual do Almoxarifado SIGA-ADM

Tutorial de Computação Introdução a Programação Gráfica em Lazarus Para MEC 1100 v

Capítulo 6. Delphi x Web x WebBroker. Primeiro Exemplo (Hello World)

Sistema de Arquivos. Ambientes Operacionais. Prof. Simão Sirineo Toscani

Para participar de um mapa colaborativo usando o Cmap Tools

Transcrição:

DINAMIC LINK LIBRARIES Capítulo 7 Neste capítulo discutiremos o que é uma DLL, seus aspectos e tipos e ainda, porquê é tão importante para as aplicações Windows O QUE É UMA DLL? Dinamic Link Libraries são módulos de programas que armazenam código, dados ou recursos que podem ser compartilhados entre diversas aplicações Windows. Uma DLL é funcionalmente equivalente a uma unit, pois representa uma coleção de funções externas ao módulo principal da aplicação. A principal diferença entre DLL e unit está no modo como são linkadas, pois a unit é linkada em tempo de compilação, enquanto que a DLL é linkada em tempo de execução. Um dos principais usos das DLLs é permitir que as aplicações carregam código executável em run-time, ao invés de linkar o código a aplicação em compile-time. As DLLs KERNEL32.DLL, USER32.DLL e GDI32.DLL são 3 das DLLs que compõem a Win32. O Kernel32.dll é responsável pela gerência de memória, processos e threads. O User32.dll possui rotinas para que a interface com o usuário possa criar janelas e manipular mensagens, O Gdi32.dll, manipula gráficos. Outras DLLs importantes são: ADVAPI32.DLL (gerencia a segurança de objetos e do Registry) e COMDLG32.DLL que manipula janelas de diálogo. Outra grande vantagem do uso de DLLs, é tornar a aplic ação modular, isso simplifica a atualização da aplicação, pois só é necessário atualizar a DLL e não toda a aplicação. O S.O. Windows é um grande exemplo de modularidade. Uma DLL é basicamente a mesma coisa que uma programa executável, a principal diferença é que uma DLL não é um arquivo executável independente, apesar de armazenar código executável. A maioria das DLLs possuem a extensão.dll, porém existem outras extensões tais como:.drv ( device driver),.sys (arquivos do sistema),.fon( recursos de fonte). DLLs compartilham seu código com outras aplicações em um processo chamado Linkagem Dinâmica. Quando uma aplicação usa uma DLL, a Win32 assegura que somente uma cópia daquela DLL está em memória, esta tarefa é realizada através de uma arquivo mapeado em memória, isto é, a DLL é carregada na heap da Win32 e depois mapeada no endereço do processo chamador. Quando uma DLL é chamada por múltiplos processos, cada processo recebe uma imagem da DLL. Isso não significa que existem diversas copias da DLL em memória, A imagem da DLL é coloca na espaço de endereçamento de cada processo, através do mapeamento da heap do sistema. Delphi Pag. 109

CRIANDO UMA DLL Para criar uma DLL, selecione o item de menu File/New: O Delphi cria o esqueleto de uma DLL, veja a figura abaixo: Delphi Pag. 110

Uma vez gerado o código do esqueleto da DLL, basta adicionar o conjunto de funções que serão exportadas. O código abaixo ilustra uma DLL de funções matemáticas triviais. library math; uses SysUtils, Classes; function pi : extended; result := 3.14159; function AreaCircunf(Raio: Extended): Extended; stdcall; export; result := pi*sqr(raio); function soma(a,b: Extended):Extended;stdcall; export; result := A+B; function Multiplica (A,B: Extended): Extended; stdcall; export; result := A*B; exports AreaCircunf index 1, Soma Index 2, Multiplica index 3; end. A função PI não está sendo exportada, pois é privada à DLL. Funções privadas em DLLs só podem ser usadas no interior da library. CARREAGANDO UMA DLL Uma DLL pode ser carregada de duas maneiras distintas: Estaticamente ou Dinamicamente. A escolha de como carregar uma DLL deverá levar em consideração a vantagem e desvantagem de cada modo. STATIC LINKING x DYNAMIC LINKING A linkagem estática (Static Linking) refere-se ao método usado pelo compilador Delphi para carregar a DLL, isto é, O método estático sempre referencia o mesmo endereço de entrada na DLL e o Windows, ao carregar o aplicativo para a memória, Delphi Pag. 111

também carrega a DLL. Caso a DLL não seja encontrada, Windows não permite que o aplicativo seja executado pois falta um componente essencial. A linkagem estática pode ser feita através do.dpr ou da própria unit. O código abaixo ilustra a importação de uma DLL estaticamente. unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(tform) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } var Form1: TForm1; implementation {$R *.DFM} function Soma (A,B : Extended): Extended; external 'teste.dll' index 2; procedure TForm1.Button1Click(Sender: TObject); Soma(1,2); end. A carga dinâmica (Dinamic Linking) a ligação entre a chamada da função e o código executável é resolvido em run-time através do uso de uma referência externa à função da DLL. Essa declaração geralmente é feita em uma unit separada chamada Import. Esta unit declara as funções e procedimentos importados. Suponha que você possui uma DLL chamada MAXLIB.DLL que possui a função: Function Max(I1, I2 : integer): integer; A unit Import será: Unit MaxUnit; Interface Delphi Pag. 112

Function Max(I1, I2: Integer): Integer; Implementation Function Max; External MaxLib ; End. Este exemplo ilustra uma das duas formas de fazer uma carga dinâmica, ele é chamado Implicit Loading. A outra forma de fazer a carga dinâmica de uma DLL é através do uso da API LoadLibrary( ). Neste caso, chamamos de Explicit Loading. Deve-se atentar para o modo de carga de uma DLL. Por exemplo, suponha que uma DLL possua muitas funções e nem sempre sua aplicação faz uso dessas rotinas, logo, se a carga da DLL for implícita, haverá um desperdício de memória, então neste caso deve-se fazer uma carga explícita. A Win32 possui funções específicas para DLLs, a saber: LoadLibrary( ), FreeLibrary( ) e GetProcAddress( ). LoadLibrary( ) FreeLibrary( ) GetProcAddress( ) Faz a carga de uma DLL e faz seu mapeamento no espaço de endereçamento do p rocesso. Libera a instância da library Retorna o endereço de uma função O exemplo abaixo ilustra uma carga explícita: procedure TMainForm.btnGetCalendarClick(Sender: TObject); var LibHandle : THandle; ShowCalendar: TShowCalendar; { Tenta carregar a DLL } LibHandle := LoadLibrary('CALENDARLIB.DLL'); try if LibHandle = 0 then raise EDLLLoadError.Create('Unable to Load DLL'); @ShowCalendar := GetProcAddress(LibHandle, 'ShowCalendar'); if not (@ShowCalendar = nil) then lbldate.caption := DateToStr(ShowCalendar(Application.Handle, Caption)) else RaiseLastWin32Error; finally FreeLibrary(LibHandle); // Descarrea a DLL. EXCEPTIONS em DLLs Nas versões anteriores do Delphi, fazia -se necessário verificar se ocorreria uma exception na DLL, caso ocorre-se a exception ela deveria ser capturada antes que escapa-se da DLL. No Delphi 4 isso não é mais necessário pois as exceptions do Delphi4 Delphi Pag. 113

são mapedas como exceptions da Win32. Para que isso funcione, você deve incluir a unit SysUtils na cláusula uses da DLL. A DIRETIVA SAFECALL Funções do tipo SafeCall são usadas em manipulação de exceções e no COM, que garantem que qualquer exceção será propagada ao chamador da função. Resumindo, uma função do tipo SafeCall converte a exceção em um valor de retorno HResult. Veja um exemplo da sintaxe de uma função SafeCall: Function NCE_UFRJ(Serra : Integer): Integer; Safecall; O compilador enxerga a função como: Function NCE_UFRJ(Serra : Integer): Integer; HResult; StdCall; O compilado ainda insere implicitamente um bloco Try..Except que envolve toda o conteúdo da função e captura qualquer exceção. HOUSEKEEPING Algumas vezes, necessitamos desalocar estruturas alocadas durante a execução de uma DLL. A melhor maneira de fazer isso é implementar toda a funcionalidade da DLL em unit a serem utilizadas pela DLL. O código para desalocar as estruturas poderia ser colocado na cláusula Finalization das units que fazes as alocações. Recomenda-se que toda unit que possui uma sessão Initialization também inclua uma sessão Finalization. LOCALIZAÇÃO DOS.DLL Para garantir que uma DLL será encontrada no momento de sua chamada, é necessário que ela esteja em um dos seguintes diretórios: Diretório do programa executável; Diretório \WINDOWS Diretório \WINDOWS\SYSTEM Ou qualquer outro diretório mencionado na variável de ambiente PATH. Delphi Pag. 114