DLL's - C / Visual Basic

Iniciado por Dark_Side, 22 de Novembro , 2006, 12:44:58 AM

tópico anterior - próximo tópico

0 Membros e 1 Visitante estão vendo este tópico.

Dark_Side

Hi,
Novamente, eu floodando o fórum lolz...

O objetivo desse flood é explicar a criação e uso de DLL's.
No artigo, veremos como podemos criar de forma simples nossas próprias DLLS. Veremos ainda como podemos chamá-las e utilizar suas funções. Utilizarei a linguagem C para criar nossa DLL, e para chamá-la, veremos duas versões: uma na própria linguagem C e outra utilizando Visual Basic.


Let's go?

Para começar, iremos definir o que é uma DLL. A sigla DLL significa Dynamic Link Library (ou Biblioteca de Vínculo Dinâmico).

As DLL's são arquivos com a extensão .DLL que armazenam um conjunto de rotinas e funções executáveis, separadamente. Estas rotinas e funções são carregadas e utilizadas assim que necessárias por um programa. A principal vantagem de fazer o uso de DLL's é que podemos utilizar as funções que estam armazenam em diversos programas, sem termos que defini-las e inserir seus respectivos códigos em cada um deles, apenas carregando-os. Muitas vezes, quando estamos trabalhando com hooks, fazemos o uso de DLL's para torná-lo global, sendo o Hook para KeyBoard (utilizado para interceptar as teclas pressionadas no teclado) o mais comum.


Veremos agora como podemos proceder para criarmos nossa própria DLL, com um exemplo simples ;)

Como havia dito, utilizarei a linguagem C para fazer o trabalho. Por ser um compilador comum, no projeto, farei o uso do Dev C++.

Após abrir o programa, faça o seguinte:

>> No meu Arquivo, selecione Novo Projeto;
>> Selecione "DLL" e marque a opção "Projeto C", em seguida, dê um nome para seu projeto e clique em "OK".
>> Observe a imagem



No Dev C++, logo após criamos um novo projeto, este já inclui os arquivos:

dll.h
dllmain.c

Iremos apagar estes dois arquivos, afinal, queremos saber como fazer o processo
passo a passo, não é mesmo ;)


Para chamar esta função, poderíamos simplesmente fazer:

Dim resultado as Long
resultado = soma(10,20)
MsgBox resultado

Veja o código completo:

Private Declare Function soma Lib "dll.dll" (ByVal x As Long, ByVal y As Long) As Long

Private Sub Form_Load()
Dim resultado As Long
resultado = soma(10, 20)
MsgBox resultado
End Sub

É importante notar que, a DLL e o aplicativo devem estar no mesmo diretório. Existe, porém, uma exceção:
Caso a DLL esteja dentro de "C:\WINDOWS\SYSTEM32" pode-se chamar por esta normalmente, como se estivesse dentro do mesmo diretório. Em outras palavras, caso a DLL esteja no local decrito acima, ela pode ser chamada normalmente. Exemplo:


 
HINSTANCE dll = LoadLibrary("dll.dll");

Se a DLL "dll.dll" estivesse em "C:\WINDOWS\SYSTEM32" ela seria carregada =)


Segue abaixo, o download do source + binários da DLL e executáveis utilizados no tutorial:

http://three.fsphost.com/darkside/dll.rar

Bye.

rog

vc esta virado numa aguia dark side

gostei

rog
realty.sys is corrupt :  reboot the universe (Y/N)

Sladrak

Ae Dark_Side o artigo está muito bom!!!
Veio em boa hora, com toda a discussão sobre dlls, em outro topico, fiquei curioso sobre elas hehehe...

Agora me de uma luz por favor, qualquer um que saiba(obvio), vamos supor que eu tenha a
dll X.dll e não sei a funcionalidade dela, ou seja não sei quais funções, argumentos e etc, existem nela.
Como poderia descobrir isso??? Se existir um "biblioteca" com as dlls mais comuns alguém poderia me indicar um link para tal?

Obrigado!!!

Flw

insanity


Ðark$pawn

Nem falo nada... hehehe

Ponto Positivo!!! ;)

Dark_Side

Citação de: "Sladrak"Ae Dark_Side o artigo está muito bom!!!
Veio em boa hora, com toda a discussão sobre dlls, em outro topico, fiquei curioso sobre elas hehehe...

Agora me de uma luz por favor, qualquer um que saiba(obvio), vamos supor que eu tenha a
dll X.dll e não sei a funcionalidade dela, ou seja não sei quais funções, argumentos e etc, existem nela.
Como poderia descobrir isso??? Se existir um "biblioteca" com as dlls mais comuns alguém poderia me indicar um link para tal?

Obrigado!!!

Flw

Hi,

Geralmente, eu uso o Dependency Walker - ferramenta inclusa no Visual C++. O programa mostra as funções, entry points, módulos e outras informações úteis sobre uma determinada DLL.

Download:

http://three.fsphost.com/darkside/dep_walker.rar

Bye ;)