Criando uma DLL '
Página 1 de 1
Criando uma DLL '
Criando uma DLL no DEV-C++:
Primeiramente, crie um projeto do tipo DLL, e escolha o tipo de arquivo CPP, salve o projeto em uma pasta, com o nome mydll.dev
(aqui está um problema, arquivos .c não funcionam com o comando extern, que veremos a seguir, porem, voce pode criar um CPP e fazer as funções em C sem nenhum problema)
Remova do projeto os 2 arquivos que são criados com o projeto
Criação do Header: Vamos chamar de mydll.h, e adicione ao projeto (menu Project/New file ou Add to Project)
(preste atenção nos nomes que voce vai dar aos seus arquivos)
nesse header vão os prototipos das funções que serão implementadas no mydll.cpp
exemplo do codigo:
mydll.h
CODE
#ifndef _MYDLL_H_
#define _MYDLL_H_
#include
extern "C" __declspec(dllexport) void MinhaFuncao();
#endif
explicações:
#ifndef _MYDLL_H_
#define _MYDLL_H_
- eles representam o nome do header, exemplo: _TESTE_H_ para um header teste.h
#include
- include da lib stdio.h, que será usada na mydll.cpp
extern "C" __declspec(dllexport) void MinhaFuncao();
- protitipo da função MinhaFuncao() que será implementada na mydll.cpp
-- extern "C" (se eu não me engano) mantem o nome da função intacta apos a compilação (teste sem esse extern "C" no final do tutorial, e verá que o executavel da erro)
-- __declspec(dllexport) não lembro pra que que serve
-- void MinhaFuncao(); tipo e nome da função;
obs: pra cada função que você deseja ter acesso na dll, deve ser colocada desse jeito, nesse tutorial será usada apenas uma função.
obs: se sua dll tiver classes (C++) e forem utilizadas por outra aplicação, também devem ser declaradas, procure por outros tutoriais de dll que alguns tem exemplos com classes nos prototipos
Fim do arquivo header, agora vamos criar o mydll.cpp, que contém as funções implementadas
crie ou adicione um mydll.cpp no projeto, e veja o codigo de exemplo
mydll.cpp
QUOTE
#include "mydll.h"
extern "C" __declspec(dllexport) void MinhaFuncao() {
... comandos1
... comandos2 ...
}explicações:
#include "mydll.h"
- inclui o header da dll
extern "C" __declspec(dllexport) void MinhaFuncao()....
- declaração da função e sua implementação
Pronto, sua DLL está pronta, agora clique no menu Execute/Compile ou Ctrl+F9, e sua dll será criada na sua pasta do projeto, com o nome do arquivo do projeto (mydll.dll)
A parte de criação da dll está concluida, vamos fazer a aplicação e rodar ela? vamos!!!
Feche seu projeto, e crie um novo de acordo com sua necessidade, (console application, gtk+ application.... etc)
no exemplo será utilizado Console Application, segue o codigo:
main.c (repare que agora não tem problema em ser um arquivo .c ou .cpp)
QUOTE
#include
#include
#include
typedef void (WINAPI*cfunc)();
cfunc FuncaoTemp;
int main() {
HINSTANCE hLib=LoadLibrary("mydll.dll");
if (!hLib) { printf("error"); return 0; }
FuncaoTemp=(cfunc)GetProcAddress((HMODULE)hLib, "MinhaFuncao");
FuncaoTemp();
FreeLibrary((HMODULE)hLib);
getch();
}
explicações:
#include...
- alguns includes necessarios para sua aplicação, e a lib windows.h, que irá acessar a dll criada
typedef void (WINAPI*cfunc)();
- define o tipo cfunc
cfunc FuncaoTemp;
- cria a variavel FuncaoTemp do tipo cfunc, ela irá receber a função que voce criou na dll (MinhaFuncao), como se ela aprendesse o que a MinhaFuncao faz...
HINSTANCE hLib=LoadLibrary("mydll.dll");
- carrega a dll na variavel hLib, retorna NULL em caso de erro (nesse caso, mydll.dll está no mesmo diretorio da aplicação main.c)
FuncaoTemp=(cfunc)GetProcAddress((HMODULE)hLib, "MinhaFuncao");
- atribui à FuncaoTemp a função MinhaFuncao da dll
FuncaoTemp();
- executa a função
FreeLibrary((HMODULE)hLib);
- libera da memoria a dll
compile, e pronto
você agora pode alterar os comandos da dll e acessa-la na aplicação, sem a necessidade de recompilar a aplicação]
com isso sua aplicação carrega dinamicamente uma dll
Primeiramente, crie um projeto do tipo DLL, e escolha o tipo de arquivo CPP, salve o projeto em uma pasta, com o nome mydll.dev
(aqui está um problema, arquivos .c não funcionam com o comando extern, que veremos a seguir, porem, voce pode criar um CPP e fazer as funções em C sem nenhum problema)
Remova do projeto os 2 arquivos que são criados com o projeto
Criação do Header: Vamos chamar de mydll.h, e adicione ao projeto (menu Project/New file ou Add to Project)
(preste atenção nos nomes que voce vai dar aos seus arquivos)
nesse header vão os prototipos das funções que serão implementadas no mydll.cpp
exemplo do codigo:
mydll.h
CODE
#ifndef _MYDLL_H_
#define _MYDLL_H_
#include
extern "C" __declspec(dllexport) void MinhaFuncao();
#endif
explicações:
#ifndef _MYDLL_H_
#define _MYDLL_H_
- eles representam o nome do header, exemplo: _TESTE_H_ para um header teste.h
#include
- include da lib stdio.h, que será usada na mydll.cpp
extern "C" __declspec(dllexport) void MinhaFuncao();
- protitipo da função MinhaFuncao() que será implementada na mydll.cpp
-- extern "C" (se eu não me engano) mantem o nome da função intacta apos a compilação (teste sem esse extern "C" no final do tutorial, e verá que o executavel da erro)
-- __declspec(dllexport) não lembro pra que que serve
-- void MinhaFuncao(); tipo e nome da função;
obs: pra cada função que você deseja ter acesso na dll, deve ser colocada desse jeito, nesse tutorial será usada apenas uma função.
obs: se sua dll tiver classes (C++) e forem utilizadas por outra aplicação, também devem ser declaradas, procure por outros tutoriais de dll que alguns tem exemplos com classes nos prototipos
Fim do arquivo header, agora vamos criar o mydll.cpp, que contém as funções implementadas
crie ou adicione um mydll.cpp no projeto, e veja o codigo de exemplo
mydll.cpp
QUOTE
#include "mydll.h"
extern "C" __declspec(dllexport) void MinhaFuncao() {
... comandos1
... comandos2 ...
}explicações:
#include "mydll.h"
- inclui o header da dll
extern "C" __declspec(dllexport) void MinhaFuncao()....
- declaração da função e sua implementação
Pronto, sua DLL está pronta, agora clique no menu Execute/Compile ou Ctrl+F9, e sua dll será criada na sua pasta do projeto, com o nome do arquivo do projeto (mydll.dll)
A parte de criação da dll está concluida, vamos fazer a aplicação e rodar ela? vamos!!!
Feche seu projeto, e crie um novo de acordo com sua necessidade, (console application, gtk+ application.... etc)
no exemplo será utilizado Console Application, segue o codigo:
main.c (repare que agora não tem problema em ser um arquivo .c ou .cpp)
QUOTE
#include
#include
#include
typedef void (WINAPI*cfunc)();
cfunc FuncaoTemp;
int main() {
HINSTANCE hLib=LoadLibrary("mydll.dll");
if (!hLib) { printf("error"); return 0; }
FuncaoTemp=(cfunc)GetProcAddress((HMODULE)hLib, "MinhaFuncao");
FuncaoTemp();
FreeLibrary((HMODULE)hLib);
getch();
}
explicações:
#include...
- alguns includes necessarios para sua aplicação, e a lib windows.h, que irá acessar a dll criada
typedef void (WINAPI*cfunc)();
- define o tipo cfunc
cfunc FuncaoTemp;
- cria a variavel FuncaoTemp do tipo cfunc, ela irá receber a função que voce criou na dll (MinhaFuncao), como se ela aprendesse o que a MinhaFuncao faz...
HINSTANCE hLib=LoadLibrary("mydll.dll");
- carrega a dll na variavel hLib, retorna NULL em caso de erro (nesse caso, mydll.dll está no mesmo diretorio da aplicação main.c)
FuncaoTemp=(cfunc)GetProcAddress((HMODULE)hLib, "MinhaFuncao");
- atribui à FuncaoTemp a função MinhaFuncao da dll
FuncaoTemp();
- executa a função
FreeLibrary((HMODULE)hLib);
- libera da memoria a dll
compile, e pronto
você agora pode alterar os comandos da dll e acessa-la na aplicação, sem a necessidade de recompilar a aplicação]
com isso sua aplicação carrega dinamicamente uma dll
Dr.Malz- Administrador
- Mensagens : 48
Pontos : 89
Reputação : 1
Data de inscrição : 17/03/2012
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos