Puerto Paralelo (P. de la Impresora) y Visual C++
Hola, estoy haciendo un programa para controlar unos LEDs usando el puerto paralelo de mi pc, pero no puedo enviar nada al puerto estoy usando las apis de windows y visual c++ , aqui esta lo poco que llevo:
#include <windows.h>
#include <stdio.h>
int main()
{
HANDLE Puerto;
int seleccion;
char *cadena;
Puerto = CreateFile("LPT1",GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if (Puerto == INVALID_HANDLE_VALUE)
printf("nNo se pudo abrir el puerto paralelo!!");
else
{
printf("nPuerto Listonn");
do {
printf("n1 Enviar Datos");
printf("n2 Salirnn");
scanf("%i", &seleccion);
if (seleccion == 1)
{
if(!WriteFile(Puerto,"1",1,NULL,NULL))
{
printf("nNo se pudo enviar los datos");
if (!FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &cadena,
0,
NULL ))
{
printf("nNo se pudo obtener el string!!!");
}
else
printf("nError No: %i", GetLastError());
printf("nError: %s", cadena);
}
else
printf("nDatos enviados: ");
}
}while(seleccion != 2);
if(!CloseHandle(Puerto))
printf("nNo se pudo cerrar el puerto paralelo!!");
else
printf("nPuerto Cerrado");
}
printf("nnPrograma Finalizadonn");
getchar();
return 0;
}
En WIN9X al usar la funcion WriteFile (Puerto,"1",1,NULL,NULL), GetLastError(); me da codigo 87 ("No se puede escribir").
Y en WINXP la aplicacion se crashea (Se corrompe) al usar WriteFile();
En que me estoy equivocando??
#include <windows.h>
#include <stdio.h>
int main()
{
HANDLE Puerto;
int seleccion;
char *cadena;
Puerto = CreateFile("LPT1",GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if (Puerto == INVALID_HANDLE_VALUE)
printf("nNo se pudo abrir el puerto paralelo!!");
else
{
printf("nPuerto Listonn");
do {
printf("n1 Enviar Datos");
printf("n2 Salirnn");
scanf("%i", &seleccion);
if (seleccion == 1)
{
if(!WriteFile(Puerto,"1",1,NULL,NULL))
{
printf("nNo se pudo enviar los datos");
if (!FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &cadena,
0,
NULL ))
{
printf("nNo se pudo obtener el string!!!");
}
else
printf("nError No: %i", GetLastError());
printf("nError: %s", cadena);
}
else
printf("nDatos enviados: ");
}
}while(seleccion != 2);
if(!CloseHandle(Puerto))
printf("nNo se pudo cerrar el puerto paralelo!!");
else
printf("nPuerto Cerrado");
}
printf("nnPrograma Finalizadonn");
getchar();
return 0;
}
En WIN9X al usar la funcion WriteFile (Puerto,"1",1,NULL,NULL), GetLastError(); me da codigo 87 ("No se puede escribir").
Y en WINXP la aplicacion se crashea (Se corrompe) al usar WriteFile();
En que me estoy equivocando??
Estas pasando mal los parametros a la función WriteFile, ya que esta definida del siguiente modo:
BOOL WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);
y tu llamas a la función de esta manera:
WriteFile(Puerto,"1",1,NULL,NULL)
De modo que los errores son los siguientes:
1.-En el segundo parámetro le debes indicar la dirección de un buffer que contiene los datos a enviar y no un string.
2.-En el cuarto parámetro as puesto NULL cuando le tienes que indicar la dirección de una variable donde guardará el número de datos realmente escritos.
De ese modo, el código debería ser similar a este:
int Dato = 1;
int NumEsc;
if(!WriteFile(Puerto,&Dato,1,&NumEsc,NULL))
{
printf("\nNo se pudo enviar los datos");
BOOL WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);
y tu llamas a la función de esta manera:
WriteFile(Puerto,"1",1,NULL,NULL)
De modo que los errores son los siguientes:
1.-En el segundo parámetro le debes indicar la dirección de un buffer que contiene los datos a enviar y no un string.
2.-En el cuarto parámetro as puesto NULL cuando le tienes que indicar la dirección de una variable donde guardará el número de datos realmente escritos.
De ese modo, el código debería ser similar a este:
int Dato = 1;
int NumEsc;
if(!WriteFile(Puerto,&Dato,1,&NumEsc,NULL))
{
printf("\nNo se pudo enviar los datos");
hola se mira yo hoy justamente arme una placa con los 8 leds y la controlo con qbasic y tube exelentes resultados pero bue como vos estas en eso quisiera saver si saves como ingresar datos al puerto en cuestion desde ya mill graxias y si keres te doy el fuente de lo ke arme
