VB.NET - Criando uma livraria de código (DLL)


 Hoje veremos como criar uma livraria de código - DLL - usando a linguagem VB .NET.

As livrarias de código (Code Libraries) na forma de arquivos DLL (Dynamic Link Libraries) formam a base do System Operacional Windows. Os arquivos das livrarias de códigos neste formato possuem a extensão .dll.  Uma livraria de código geralmente esta no formato de um arquivo DLL e não pode ser executado como uma aplicação.

As funções que uma DLL contém são expostos de forma que outras aplicações podem acessá-las. Por exemplo, o código que gera uma GUI (Graphic User Interface) existem em arquivos DLL que são partes do sistema operacional. Estes arquivos são compartilhados e podem ser usados por outras aplicações. Ao colocar as funções mais usadas e de uso comum em uma DLL os programas não precisam conter o código destas funções, de forma que eles se tornam pequenos e fáceis de manter. (esta é a ideia...).

Neste artigo vamos mostrar como você pode criar uma DLL no VB.NET. A nossa DLL irá conter três classes sendo que cada classe possuirá  propriedades e métodos que irão fornecer informação sobre a máquina local. Abaixo temos uma visão geral da DLL:

compInfo.dll
Classe Propriedade/Método Descrição
pCPU Count Número de CPUs presentes no computador
  Architecture Arquitetura da CPU , Ex: x86
  Version Número da versão da CPU
pOS Platform O nome do sistema operacional
  Version A versão do sistema operacional.
pDisco Size O tamanho do disco especificado.
  FreeSpace O espaço livre no disco especificado.
  UsedSpace O espaço usado pelo disco especificado.

Todas as classes acima estarão presentes no arquivo DLL chamado compInfo.dll.

Criando a DLL no Visual Basic .NET

Abra o Visual Studio .NET ou o VB.NET (eu vou estar usando o VS.NET 2003) e no menu File selecione a opção New Project.

Na janela New Project selecione as opções:

  • Project Type : Visual Basic Projects
  • Templates : Windows Application
  • Name : compInfo
  • Location : d:\vbnet\compInfo

Na janela Solution Explorer , remova o formulário - form1.vb - do projeto: Clique sobre ele com o botão direito do mouse e selecione Delete do menu de contexto.

Clique com o botão direito do mouse sobre o projeto infoComp e selecione Add e a seguir Add New Item no menu de contexto.

Na janela Add New Item , selecione o template Class e informe o nome da classe como pCPU.vb na caixa de texto Name e clique no botão  Open , conforme abaixo

Esta ação irá incluir a classe pCPU ao projeto. Repita o processo acima para incluir as duas classes restantes ao projeto; o nome das classes são:

  • pDisco.vb
  • pOs.vb

Após terminar a tarefa a janela Solution Explorer do seu projeto deverá estar da seguinte forma:

Clique com o botão direito do mouse sobre o projeto compInfo e selecione a opção Properties no menu de contexto. A seguir na janela Property Pages do projeto, em Startup Object selecione a opção Sub Main , conforme figura abaixo, e, clique no botão OK.

Nota: Estaremos criando um arquivo de Modulo ao projeto onde será criada um procedimento Sub Main para testar as classes que iremos criar.

Criando as propriedades da classe pCPU

Neste momento iremos criar as propriedades(Property) da classe pCPU e você deve conhecer o conceito de propriedade no VB.NET.

De forma bem resumida podemos dizer que que propriedades são variáveis especiais que permitem encapsular o código da minha classe.

Geralmente as propriedades possuem os procedimentos Get e Set mas podemos usar os modificadores :

  • ReadOnly - permite somente a leitura da propriedade - Só possui Get
  • WriteOnly  - permite somente a atribuição de valor a propriedade - Só possui Set

O formato básica de uma declaração Property tem o seguinte formato:

Property <nome> As Integer
     ''A seção Get retorna o valor da propriedade
    Get
        Return <valor>
    End Get
     'A seção  Set aplica um valor a propreidade
    Set(ByVal Value As Integer)
        'Código
    End Set
End Property  

  • A seção Get é executada quando a propriedade é examinada
  • A seção Set é executada quando desejamos atribuir um novo valor à Property.

Para o nosso caso as propriedades serão somente para consultar valores e não será permitido atribuir valores às propriedades, por isto as nossas propriedades serão somente leitura - ReadOnly e terão seguinte formato:

 ReadOnly Property <nome>() As String
    Get
        Return
<valor>
    End Get
End Property

Para saber mais sobre propriedades leia o artigo : VB.NET - Compreendendo Propriedades 

A nossa classe pCPU tem as seguintes propriedades conforme definimos anteriormente:

Classe Propriedade/Método Descrição
pCPU Count Número de CPUs presentes no computador
  Architecture Arquitetura da CPU , Ex: x86
  Version Número da versão da CPU

Vou começar com a propriedade Count que define o número de CPUs presentes no computador. Clique duas vezes sobre a classe pCpu na janela Solution Explorer de forma a que a janela de código exibe a classe pCPU.

Inclua o seguinte comando no topo do código da janela da classe pCPU:  Imports  System.Environment  

Esta declaração nos dá acesso ao método GetEnvironmentVariable  da classe System.Environment . Este método retorna o valor de uma variável de ambiente.  Usando uma variável de ambiente que fica armazenada no registro do WIndows podemos saber o número de CPUs no computador.  A variável de ambiente para este caso é NUMBER_OF_PROCESSORS. Inclua a seguir o código abaixo a classe pCPU.

ReadOnly Property Count() As String
    Get
        Return GetEnvironmentVariable("NUMBER_OF_PROCESSORS").ToString
    End Get
End Property

Após isto, a janela de código da classe pCPU deverá ter a seguinte aparência:

As propriedades Architeture e Version terão o mesmo padrão de comportamento(usando o método GetEnvironmentVariable),  e, também usarão as variáveis de ambiente para obter os valores desejados :

  • Architecture - usa a variável de ambiente :  PROCESSOR_ARCHITECTURE
  • Version -  usa a variável de ambiente:  PROCESSOR_LEVEL

Ao final, após incluir o código para as 2 classes acima teremos o seguinte código:

Criando as propriedades da classe pOs

A classe pOs foi definida como tendo as seguintes propriedades:

Classe Propriedade/Método Descrição
pOS Platform O nome do sistema operacional
  Version A versão do sistema operacional.

Novamente vamos usar o namespace System.Environment , e, através da declaração Imports declará-lo em nossa classe.

Este namespace nos dá acesso a classe OSVersion a qual possui as propriedades Plataform e Version que retornará os valores que desejamos obter. Selecione a classe pOs na janela Solution Explorer e inclua o código abaixo na classe:

Criando os métodos na classe pDisco

Com a  classe pDisco desejamos obter informações sobre tamanho, espaço livre e espaço usado do disco. A classe foi definida para ter os seguintes métodos:

Classe Propriedade/Método Descrição
pDisco Size O tamanho do disco especificado.
  FreeSpace O espaço livre no disco especificado.
  UsedSpace O espaço usado pelo disco especificado.

Ao invés de propriedades iremos criar 3 métodos ( Size, FreeSpace e UsedSpace) na classe pDisco.  Os métodos podem ser vistos como funções que podem receber parâmetros e retornar valores. Para o nosso caso os métodos definidos precisam receber como parâmetro a informação do disco ou letra do drive do qual desejamos obter as informações. Ex: objetoDisco.Size("c:")

Para acessar informações sobre os discos do computador precisamos usar componente ManagementObject que estão disponíveis através do componente System.Management. Ocorre que a livraria do componente System.Management não esta disponível por padrão, de forma que teremos que incluir uma referência a ela em nosso projeto. Vamos fazer isto:

  • Clique com o botão direito do mouse sobre o nome do projeto na janela Solution Explorer
  • Selecione a opção Add Reference no menu da janela de contexto
  • Na janela Add Reference, ver abaixo, na aba .NET, selecione a opção - System.Management e clique no botão Select
  • Clique no botão OK

Agora selecione a classe pDisco na janela solution Explorer de forma que ela seja exibida na janela de código, e, inclua a declaração abaixo no início do arquivo:

    Imports  System.Management  

Com isto temos acesso a classe ManagementObject que pode receber um parâmetro win32_logicaldisk.deviceid=<drive> para obter informação sobre um disco específico do computador.

Para incluir o método na classe digite o código abaixo na  janela de código da classe:

Neste código nós construímos um ManagementObject chamado Disco. Usando o método Get nós preenchemos a sua coleção com informações sobre o drive ( Drive ) que foi passado via parâmetro win32_logicaldisk.deviceid= para a chamada do construtor de ManagementObject. Os diferentes elementos da coleção Disco podem ser acessados através de uma string. Ex: Disco("Size").

Os métodos FreeSpace e UsedSpace também usam a classe ManagementObject e também recebem o parâmetro win32_logicaldisk.deviceid=<drive> para obter as informações desejadas. Abaixo temos o código de ambos os métodos na classe:

Já temos as 3 classes com suas propriedades e métodos definidos e prontas. Antes de gerar a DLL vamos testar as nossas classes.

Clique com o botão direito do mouse no nome do projeto na janela Solution Explorer e selecione a opção Add e a seguir Add New Item do menu de contexto.

Na janela Add New Item, em templates selecione Module e informe o nome testeInfoComp.vb conforme figura abaixo:

Selecione o arquivo testeInfoComp.vb e na janela de código inclua o seguinte código :

Agora é só executar o projeto para ver o resultado.

Gerando o arquivo compInfo.dll

Tudo esta pronto para gerar a nossa DLL , o arquivo compInfo.dll

Antes de prosseguir exclua o código que foi incluído no modulo Sub Main e exclua também o arquivo testeInfoComp.vb  que foi usado só para testar o projeto.

Teremos que alterar a propriedade do projeto para isto clique com botão direito do mouse sobre o nome do projeto na janela Solution Explorer e selecione a opção Properties.

Na janela Property Pages altere na opção Output Type para Class Library e clique no botão Ok.

Não esqueça de alterar o modo de Debug para Release

NotaA inclusão de informação de debug na versão compilada do seu projeto permite que você faça o debug a aplicação durante o processo de desenvolvimento. Para aumentar a velocidade e reduzir o tamanho da versão final do seu aplicativo altere a opção para Release sempre quando for compilar sua aplicação.

Agora clique sobre o nome do projeto e selecione a opção Build para compilar o projeto.

Feito isto, se você olhar na pasta bin do seu projeto irá ver o arquivo DLL compInfo.dll gerado com sucesso e pronto para ser usado.

Nota: Você verá também uma versão .EXE do projeto - compInfo.exe - que foi gerada durante os testes do projeto.

Você acabou de gerar uma DLL onde criou 3 classes com métodos e propriedades que podem ser usadas por qualquer aplicativo. Basta fazer a referência a sua DLL gerada e acessar os métodos e propriedades definidos.

Usando a DLL criada

Vamos agora utilizar a DLL que criamos. Para isto vamos criar um novo projeto no VB.NET do tipo Windows Application com o nome testandoDLL.

No formulário padrão vamos incluir 5 controles TextBox, 5 controles Labels e 1 botão de comando conforme figura abaixo.

Vamos incluir a referência a nossa DLL compInfo.dll criada. Para isto clique com o botão direito do mouse sobre o nome do projeto e selecione a opção Add Reference

Na janela Add Reference , na aba .NET, clique no botão Browse e selecione o arquivo compInfo.dll que deve estar na pasta \bin do diretório do projeto compInfo. A seguir clique em Select e em OK.

Agora podemos ter acesso a nossa DLL. No evento Click do botão de comando insira o seguinte código:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


Dim
infoCpu As New compInfo.pCPU

Dim infoDisco As New compInfo.pDisco

Dim infoMemoria As New compInfo.pMemoria

Dim infoOs As New compInfo.pOS
 

textbox1.text = infoCpu.Architecture

TextBox2.Text = infoDisco.Size("C:")

TextBox3.Text = infoDisco.UsedSpace("C:")

TextBox4.Text = infoDisco.FreeSpace("C:")

TextBox5.Text = infoOs.Platform


End
Sub

A primeiras 4 linhas de código criam instâncias de objetos usando a classe compInfo. A seguir estamos usando as propriedades de cada objeto para obter os valores e exibi-los nas caixas de texto.

O resultado da execução do projeto é dado a seguir:

Como vimos nada que exija um conhecimento avançado.(Que tal fazer uma formatação do resultado para o espaço em disco...)

Até o próximo artigo VB.NET ...


Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#
 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 

Referências:


José Carlos Macoratti