Para exemplificar, utilizaremos uma dll especifica para manipulação de porta paralela no windows 2000/XP, os quais bloqueam acesso direto por endereçamento por questões de segurança.
Inclua a Dll no seu diretorio onde encontra-se o codigo fonte e seu arquivo ja compilado.
instancie a dll dentro de seu codigo fonte. isso pode ser feito como abaixo:
/* prototipos (funçao typedef) para os métodos contidas na DLL: */
/* consultar a dll utilizada para verificar os metodos ali contidos*/
#include "windows.h"
typedef short (_stdcall *inpfuncPtr)(short portaddr);
typedef void (_stdcall *oupfuncPtr)(short portaddr, short datum);
no seu metodo principal (main) declaramos as seguintes variaveis:
HINSTANCE hLib;onde hLib é a variável a qual apontara para o endereço da Dll.
inpfuncPtr inp32;
oupfuncPtr oup32;
e inp32 e oup32 são variaveis para o tipo de dado para ser escrito via dll.
Carregue a dll
/* carregando a lib */
hLib = LoadLibrary("inpout32.dll");
if (hLib == NULL) { //se falhar volta erro
cout<<"LoadLibrary Failed";
Obtenha os endereços dos metodos contidos na dll
/* Obtendo endereço da funçao INP32 - Leitura Porta */
inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
if (inp32 == NULL) { //se falhar retorna erro em tela
cout<<"GetProcAddress for Inp32 Failed";
/* Obtendo endereço da funçao OUP32 - Escrita Porta */
oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");
if (oup32 == NULL) {
cout<<"GetProcAddress for Oup32 Failed";
ao final da execução deste código teremos 2 métodos criados e linkados junto a dll
pronto para ser usado em codigo normal.
Veja exemplo:
short Input (short porta) {
return (inp32)(porta);
}
void Output(short porta, short data) {
(oup32)(porta,data);
}
3 comentários:
fazar coisas complexas ficar
simples , e coisa de genio...
um milhao de parabens..graças a deus que voce existe.
eu ainda naõ consegui fazer isso funcionar.
minha duvida é tenho uma função em minha dll int teste(string tamanho) e irei chamar ela na criação de uma outra dll que estou projetando. como fazer isso?
Ótimas dicas, funcionou perfeiamente!!
Postar um comentário