Ir para conteúdo
Faça parte da equipe! (2024) ×
Conheça nossa Beta Zone! Novas áreas a caminho! ×
  • Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.

.Ensinando a Cria Uma.. DL


wcwillian
 Compartilhar

Posts Recomendados

Hoje vamos falar sobre “Dynamically Linked Libraries”. Com certeza você conhece não é? Não? Tudo bem, deve ser o fato de estar em Inglês. Traduzindo: “Bibliotecas Dinamicamente Ligadas”, agora sim? Ainda não? Então vamos ao popular DLL.

 

Neste artigo vamos analisar como tudo começou e fazer um exemplo simples, bem relativo ao tema “Criando minha primeira DLL”. Não será nenhum exemplo do estilo “Hello World”, mas também nenhum mega-exemplo ensinando como acabar com todos os problemas do Windows, mas sim uma função para Leitura e outra para Escrita em Arquivo INI usando e técnica de implementar o código em DLL.

 

Introdução

 

Nada melhor antes da prática do que uma boa dose de teoria, não é mesmo? Vamos falar um pouco sobre DLL e Arquivos INI.

 

Dlls

 

Nos primórdios da informática os programas eram constituídos apenas de um arquivo executável, onde no mesmo havia todas as informações e instruções necessárias para seu funcionamento, porém como há programas e PROGRAMAS, tínhamos paralelamente aos programas de porte simples os complexos, estes sim, continham diversos executáveis.

 

Com o decorrer do tempo, isso obviamente só aumentou, consideravelmente após o início da utilização de interface gráfica chamada de GUI (Graphical User Interface ou Interface Gráfica de Usuário), que fez com a divisão do programa em vários executáveis se tornasse inviável na questão de produtividade, já que o código entre os executáveis não podia ser compartilhado. Ou seja, se você tinha uma função que era utilizada em todos os executáveis de seu programa, você deveria implementá-la em cada um deles (ou melhor, dizendo fazer em uma e CTRL+C e CTRL+V em outra).

 

Para solução disto, nossos amigos projetistas do Windows começaram a usar uma estratégia denominada “Linkagem Dinâmica”, que resumidamente se explica em: o programador informar no código a localização de uma biblioteca de função (externa ao programa) e o compilador “juntar” as funções da biblioteca com o código implementado pelo programador. Em síntese, as funções são retiradas do arquivo executável e armazenadas em uma biblioteca, contudo, temos inúmeras vantagens, duas das mais relevantes são:

 

Compartilhamento do Código, já que vários executáveis podem se referenciar a mesma biblioteca.

 

Atualizações do Programa se torna mais fácil já que só é preciso alterar as bibliotecas e não o executável evitando ter que reinstalar o programa.

 

Essas bibliotecas são padrões de todos os sistemas da família Windows, como exemplos têm-se as famosas API (Application Program Interface ou Aplicação de Programa de Interface) do Windows, que em grande parte dos casos são baseadas nesse tipo de biblioteca.

 

As APIs (que em resumo são bibliotecas que contêm informações de como devem ser os caixa de textos, botões de comando, caixa de mensagens, etc) propiciam ao programador menos trabalho no desenvolvimento e além de tudo determina uma padronização de interface nos programas.

 

Você deve estar se indagando, “Legal saber tudo isso, mas onde isso me ajuda?”. Sem dúvidas, a principio essa técnica parece um tanto quanto distante da nossa realidade de programação, já que não estamos desenvolvendo nenhum Sistema Operacional (pelo menos eu não), porém, se você analisar com um pouco mais de atenção, notará que isso é ao contrário do que se imagina. Vou citar dois exemplos práticos:

 

01. Digamos que você tem uma função que serve para que o usuário via e-mail entre em contato com você para esclarecimento de dúvidas. Tudo bem até aí, porém você possui 15 aplicações que se utilizam dessa mesma função. Certo dia você precisa mudar o e-mail de contato, como fazer? Gerar um novo executável de cada uma das aplicações informando o novo e-mail de contato e enviar aos clientes, sim pode ser, ou deixar essa função em uma DLL, assim, você não precisa dispor uma nova compilação do executável, somente da DLL que contém a função.

 

02. Você desenvolveu uma função super útil e quer que todos “desfrutem” da mesma função, porém não quer disponibilizar o código em si (mui amigo você em!!!), como fazer? Simples, coloque a função em uma DLL, nela seu código estará 100% seguro (pelo menos até onde conheço não existem “decompiladores” para DLL) e todos podem utilizar a sua função.

 

Arquivos INI

 

Em resumo são arquivos utilizados para armazenamento e recuperação de dados, como um exemplo bastante simples de utilização, podemos citar o armazenamento da posição Top e Left do Form no momento em que o mesmo foi fechado, para que quando seja aberto novamente se se posicione onde estava anteriormente.

 

A estrutura funcional de um Arquivo INI é similar a um banco de dados, onde temos:

 

Seções: Conjunto que contêm chaves e Valores, em analogia a um Banco de Dados pode-se dizer que é a Tabela.

 

Chaves: Usado para Identificação correta dos Valores, em analogia a um Banco de Dados pode-se dizer que é o Campo.

 

Valores: É usado para atribuição de um Valor a uma chave, em analogia a um Banco de Dados pode-se dizer que é o Dado contido no Campo.

 

Estrutura Arquivo INI

 

 

Estrutura Banco de Dados

 

[Clientes]

 

Nome=Eledio de Souza Junior

 

 

Algo que acho importante mencionar é que as operações feitas em Arquivos INI, tanto de leitura como de escrita não retornam nenhum erro, assim, se o Arquivo INI não existir e você tentar ler algum valor de uma chave ele retornará "" (vazio), caso tente escrever ele criará o arquivo, a seção e a chave e definirá o valor informado, fica a seu critério avaliar até que ponto esse “não retorno de erro” pode ajudar ou não.

 

Desenvolvimento

 

Inicie o Visual Basic, na tela New Project, escolha a opção ActiveX DLL.

 

Renomeie o Projeto como ArquivoINI e a classe criada: INI, e nada mais prático do que falar de DLL usando uma, na classe Main declare as seguintes APIs, sendo a primeira para Escrita e a segunda Leitura no Arquivo INI:

 

01. Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

 

02. Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

 

Declare a seguinte Variável para armazenamento e recuperação do diretório do arquivo INI.

 

Private ArqINI as String

Implemente as seguintes funções:

Public Function ReadINI(ByVal Secao As String, ByVal Chave As String)

Dim RET As String

RET = Space$(255)

RetLen = GetPrivateProfileString(Secao, Chave, "", RET, Len(RET), ArqINI)

RET = Left$(RET, RetLen)

ReadINI = RET

RET = Empty

End Function

 

Public Sub WriteINI(ByVal Secao As String, ByVal Chave As String, ByVal Valor As String)

WritePrivateProfileString Secao, Chave, Valor, ArqINI

End Sub

 

Onde, a primeira utiliza a API GetPrivateProfileString serve para Ler dados do Arquivo INI baseando-se na Seção e Chave passada a ela, e a segunda por sua vez, utiliza a API WritePrivateProfileString serve para Escrever no Arquivo INI.

 

Agora vamos criar duas propriedades para nossa DLL uma delas para “setar” o Diretório do Arquivo INI, e outra para Retornar o Diretório do Arquivo INI, são elas:

 

Public Property Let SetDiretorioIni(ByVal Diretorio As String)

ArqINI = Diretorio

End Property

 

Public Property Get GetDiretorioIni() As String

GetDiretorioIni = ArqINI

End Property

 

Por último (na questão de funções) vamos fazer uma função para verificar a existência do arquivo informado. Para isso usaremos a função Dir que é intrínseca (padrão) no VB, a mesma recebe o diretório e o tipo a ser validado, no caso um Arquivo. Se o seu retorno for “” (vazio) então o arquivo não existe, caso contrário retornará o nome do arquivo, o código segue abaixo.

 

Public Property Get ExisteArquivo() As Boolean

ExisteArquivo = IIf(Dir(ArqINI, vbArchive) = "", False, True)

End Property

 

Bom é isso. Aí está sua primeira DLL implementada, simples, porém funcional. Agora compile sua DLL no Diretório System32 da sua pasta Windows.

 

Agora vamos utilizá-la. Para isso crie um novo projeto Standard EXE e nomeie-o de ExemploINI. “Desenhe” os controles conforme a tabela seguinte:

 

Form1 – Propriedade e Controles

 

Tipo

 

 

Propriedades

 

Form

 

 

Name = frmMain

Caption = Principal

BorderStyle = 3 'Fixa

 

Label

 

 

Name = Label

Caption = &Entrada

Index = 0

 

TextBox

 

 

Name = txtEntrada

Text=””

 

CommandButton

 

 

Name = cmdEscrever

Caption = &Escrever

 

Label

 

 

Name = Label

Caption = &Resultado

Index = 1

 

TextBox

 

 

Name = txtResultado

Text=””

 

CommandButton

 

 

Name = cmdLer

Caption = &Ler

 

Label

 

 

Name = Label

Caption = Dire&tório

Index = 2

 

CommandButton

 

 

Name = cmdSair

Caption = &Sair

 

TextBox

 

 

Name = txtDiretorio

Text=””

 

Para podermos utilizar as funções da DLL criada anteriormente devemos nos referenciar a ela, para isso, no menu Project escolha o item References, e localize a sua DLL, no caso ArquivoINI.dll, caso ela não esteja na lista clique em Browse e a localize.

 

Feito isso vá ao código do frmMain e faça a declaração da classe da seguinte forma:

 

Private INI As New ArquivoINI.INI

 

Se você não entendeu o que está acontecendo, calma, é o seguinte, você para utilizar uma função de uma determinada classe de uma biblioteca precisa ter a mesma declarada, no exemplo acima declaremos o objeto INI do tipo ArquivoINI.INI.

 

No evento load do form vamos informar o diretório do arquivo INI a ser utilizado (no exemplo será no diretório do executável com o nome de config.ini) e também para enfatizaremos a função de verificação de existência do arquivo:

 

Private Sub Form_Load()

txtDiretorio.Text = App.Path & "\Config.INI"

INI.SetDiretorioIni = txtDiretorio.Text

 

If Not (INI.ExisteArquivo) Then MsgBox "ATENÇÃO: Arquivo '" & INI.GetDiretorioIni & "' não foi Encontrado" & vbNewLine & "Para Execução das Operações será criado um novo arquivo", vbCritical

 

End Sub

 

Basta agora implementar os botões de leitura e escrita no arquivo, no evento click dos CommandButton cmdLer e cmdEscrever, conforme a seguir:

 

Private Sub cmdEscrever_Click()

INI.WriteINI "LOGIN", "ULTUSUARIO", Trim(txtEntrada.Text)

End Sub

 

Private Sub cmdLer_Click()

txtResultado.Text = INI.ReadINI("LOGIN", "ULTUSUARIO")

End Sub

 

E como sempre o indispensável cmdSair

 

Private Sub cmdSair_Click()

Unload Me

End Sub

 

É isso aí, está pronto!!! Caso queira o código fonte clique aqui.:pensando:Gosto Agradeca Meu Primeiro Topico

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...
Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.