Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Programa controlador de LPT só roda no meu PC


invent

Pergunta

Fala galera, bom vou contar meu problema.

Eu escrevi um codigo em C++ para controlar a porta paralela, bom compilei o codigo e ele funcionou perfeitamente acendendo todas as luzes que eu queria no prototipo de LED´s que eu faz para porta LPT.

Porem , quando fui testar meu programa nem outros computadores, o windows não quia nem iniciar o programa ele dava um erro, o mesmo erro ocorreu em mais de 10 pcs com windows XP, que é o mesmo que o meu.

Eu sei que meu codigo carrega uma DLL, quando fui testar nos outros pc levei essa DLL tambem e a coloquei junto ao programa e na pasta C:\windows tambem.

O que será que está dando errado???, sera que está faltando algum arquivo que meu computador possui???

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#include "stdafx.h"

#include <stdio.h>

#include <iostream>

#include <conio.h>

#include <dos.h> //Para saida

#include <windows.h> // Necessário para: LoadLibrary(), GetProcAddress() e HINSTANCE

using namespace std;

#define LPT1_DATA 0X378 //define o endereço da porta paralela para envio de dados

#define LPT1_STATUS 0X379 //define o endereço da porta paralela leiura de status

//Cria os ponteiros para armazenar o endereço das funções Int32 e Out32 da DLL

typedef short (_stdcall *PtrImp)(short EndPorta);

typedef void (_stdcall *PtrOut)(short EndPorta, short valor);

PtrImp inportb; //Instância para a função Imp32()

PtrOut outportb; //Instância para a função Out32()

//Declara as funções Int32 e Out32 para as funções de retorno outportb e inportb

short Inp32 (short EndPorta)

{

return (inportb)(EndPorta);

}

void Out32 (short EndPorta, short valor)

{

(outportb)(EndPorta,valor);

}

int main(int argc, char *argv[])

{

//--------Procedimentos para a definir as funções de I/O-----------------------------------------------------------------

HINSTANCE hLib ;

hLib = LoadLibrary(_T("inpout32.dll")); // Carrega a DLL, _T() é nescessario para o Visual C++ =]

if (hLib == NULL)// Verifica erro no carregamento da DLL

{

cout << "Erro. DLL 'inpout32.dll' não pode ser carregada\n";

return -1;

}

//Pega endereço da função Inp32 contida na DLL e joga em inportb.

inportb = (PtrImp) GetProcAddress(hLib, "Inp32");

if (inportb == NULL) // Verifica erro na busca da função

{

cout << "Erro. Imposivel encontrar a função Inp32.\n";

return -1;

}

//Pega endereço da função Out32 contida na DLL e joga em inportb.

outportb = (PtrOut) GetProcAddress(hLib, "Out32");

if (outportb == NULL) {

cout << "Erro. Imposivel encontrar a função Out32.\n";

return -1;

}

//-------------------------------------------------------------------------------------------------------------------------

int envio, leitura;

// Caso os parametros sejam incorretos encerra o programa, o programa permite 1 parametro somente

if (argc < 2)

{

cout << "O programa aceita somente de 0 a 256\n";

cout << "Modo de uso: " << argv[0] << " <parametro de byte> \n";

return 1;

}

// Converte o parametro de string para inteiro

envio = atoi(argv[1]);

outportb(LPT1_DATA, envio);

cout << envio;

return 0;

}

OBS: Uso Visual c++

Agradeço desdejá a ajuda

Editado por invent
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Bom, eu fui meio burro e esqueci, de colocar o erro.

BOm aparece a seguinte menssagem

"Falha da inicialização do aplicativo devido a configuração incorreta. A reinstalação do aplicativo pode resolver o problema"

Agradeço desde já qualquer ajuda.

vlw

Link para o comentário
Compartilhar em outros sites

  • 0

Você disso que apenas copiou a dll para o diretório c:\windows, certo ?

Você teria também que registrar a dll

Para isso, utilize o programa regsvr32.exe

Outra coisa:

Prefira colocar as dll's no diretório c:\windows\system32 (já que esse é o diretório "padrão" e é mais utilizado)

Você também pode colocar direto no c:\windows, mas não comum...

Instruções para registrar a dll

1. Copie sua dll para o diretório c:\windows\system32

2. Abra o Executar (menu iniciar --> executar ou simplesmente o atalho winkey+r)

3. Digite regsvr32 (minhadll.dll)

Exemplo:

regsvr32 user32.dll
Para chamar a dll em outro diretório você deve escrever o diretório completo.Exemplo:
regsrv32 C:\dlls\programa.dll

4. Aperte OK

Tente fazer isso e poste aqui o resultado !

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, antes de tudo obrigado pela ajuda....vamos aos resultados!

Primeiro vou falar qual DLL o rpograma carrega, que é a "famosa" INPOUT32.DLL, que atraves dela se pode acessar a porta paralela diretamente como Winsowz 2K_XP.

Fiz exatamente o que me recomendou, copiei a dll para pasta system32 e executei o comando:

regsvr32.exe inpout32.dll

Porem o windows me retornou a seguinte mensagem de erro:

"inpout32.dll foi carregado, mas o ponto de entrada DllRegisterServer não foi localizado.

Este arquivo não pode ser registrado."

Tentei em 2 PC diferentes um do trabalho e outro ca faculdade, e obitive o mesmo resusltado, os dois com conta de administrador

O engraçado é que eu não lembro de ter feito algo parecido no meu PC e nese o programa funciona.

Estou ficando bolado....rsrs

Será que você tem alguma outra idéia, toda e qualquer idéia é bem vinda

vlw............

Link para o comentário
Compartilhar em outros sites

  • 0
Tem certeza de que os demais computadores tem a porta paralela no mesmo endereço da sua (378 e 379)?

Abraços,

Graymalkin

Então desconfiei disso tambem, então fiz programas com endereço de 378, 278 e 178

tentei tambem em numero decimal.....mas ai tentei no meu pc com o endereço da porta paralela errada, o programa roda nomal, só que não faz nenhuma ação com a minha porta paralela.

E o rpoblema é que eu vou precisar formatar minha maquina, e alguma coisa está me disendo que após eu formatar o programa não vai funcionar....

se tiverem mas alguam idéa.......por favor

vlw

Link para o comentário
Compartilhar em outros sites

  • 0

Pesquisando um pouco achei esse link: http://support.microsoft.com/kb/249873/pt-br

nomeDll foi carregado, mas o ponto de entrada DllRegisterServer ou DllUnregisterServer não foi encontrado.

nomeDll não é um arquivo .dll ou .ocx. Por exemplo, ao digitar regsvr32 wjview.exe uma mensagem de erro será gerada.

Talvez o arquivo esteja corrompido ou algo do tipo...

Tem como você deixar a dll em algum servidor pra testar aqui em casa ?

O estranho é que você disse que funciona em seu computador...

Link para o comentário
Compartilhar em outros sites

  • 0

Fala galera,

Consegui resolver meu problema, apesar de ainda não conseguir tirar minha duvida do problema que estava ocorrido.

O que eu fiz foi utilizar o Dev C++, para compilar o codigo, assim nem precisar registrar a DLL eu precisei.........ele rodou normal em todos os computadores que eu testei.

Uma curiosidade, o meu EXE compilado no Visual C++ .NET ficou com 45,7 KB

e o que eu compilei no DEV C++ ficou com uns 455KB

Sera que era por cauda so .NET Framework??

Apesar de que uma das maquinas que eu testei, tinha o .NET framework 1, 2 e 3 instaldo, como no meu PC

Bom se quiserem colocar esse tópico como resolvido, fiquem a vontade, apesar do meu problema ter sido resolvido, ainda não descobri o motivo.....

COnclusão .NET me lascou...

vlw

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...