C/Visual C - Puerto paralelo y Visual C++ 6

 
Vista:

Puerto paralelo y Visual C++ 6

Publicado por Aleister (2 intervenciones) el 22/05/2003 01:41:54
Estoy intentando encontrar la dirección del puerto paralelo:

#include <stdio.h>

int main()
{
unsigned int __far *puntero_a_direccion;
int i;

puntero_a_direccion=(unsigned int __far *)0x00000408;

for (i=0; i<3; i++)
{
if (*puntero_a_direccion == 0)
printf("No se encontro puerto asignado a LPT%d \n", i+1);
else
printf("La direccion asignada a LPT%d es 0x%Xh\n",
i+1, *puntero_a_direccion);
puntero_a_direccion++;
}

return 0;
}

Pero me arroja un error de compilación porque el keyword "far" está obsoleto. SIn embargo con:

#include <windows.h>
#include <stdio.h>

int main()
{
LPDWORD puntero_a_direccion;
int i;

puntero_a_direccion=(LPDWORD)0x00000408;

for (i=0; i<3; i++)
{
if (*puntero_a_direccion == 0)
printf("No se encontro puerto asignado a LPT%d \n", i+1);
else
printf("La direccion asignada a LPT%d es 0x%Xh\n",
i+1, *puntero_a_direccion);
puntero_a_direccion++;
}

return 0;
}

Me arroja un error de violacion de acceso. Compilándolo en con el Turbo C++ 3 no tengo ningún problema.

Alguien podría decirme cuál es el problema en mi código o ¿cómo obtener la dirección del puerto paralelo en win32?

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Acceso al puerto paralelo en Visual C++ 6

Publicado por Alejandro (1153 intervenciones) el 11/06/2025 00:33:36
El problema que estás enfrentando se debe a que en Windows, especialmente en entornos de 32 bits como Win32, no puedes acceder directamente a las direcciones de hardware como lo hacías en Turbo C++ en un entorno de 16 bits. Windows protege el acceso directo a la memoria y a los puertos de hardware para evitar que las aplicaciones interfieran entre sí y para mejorar la estabilidad del sistema.

Solución



Para acceder al puerto paralelo en un entorno Win32, debes utilizar funciones específicas de Windows que permiten la comunicación con el hardware. Una forma común de hacerlo es utilizando la API de Windows para acceder a los puertos de entrada/salida. Aquí te muestro cómo puedes hacerlo:

1. Usar la API de Windows:
Puedes utilizar la función `CreateFile` para abrir un puerto paralelo y luego usar `WriteFile` y `ReadFile` para interactuar con él. Sin embargo, para leer la dirección del puerto paralelo, necesitarás saber cuál es la dirección base de tu puerto paralelo (normalmente 0x378 para LPT1, 0x278 para LPT2, y 0x3BC para LPT3).

2. Ejemplo de código:
Aquí tienes un ejemplo de cómo podrías acceder al puerto paralelo en Visual C++:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <windows.h>
#include <stdio.h>
 
int main() {
    // Direcciones típicas de los puertos paralelos
    DWORD puertoLPT1 = 0x378; // LPT1
    DWORD puertoLPT2 = 0x278; // LPT2
    DWORD puertoLPT3 = 0x3BC; // LPT3
 
    // Intentar leer el estado del puerto LPT1
    HANDLE hPuerto = CreateFile("\\\\.\\LPT1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
    if (hPuerto == INVALID_HANDLE_VALUE) {
        printf("No se pudo abrir el puerto LPT1.\n");
        return 1;
    }
 
    // Leer el estado del puerto
    BYTE buffer;
    DWORD bytesLeidos;
    if (ReadFile(hPuerto, &buffer, 1, &bytesLeidos, NULL)) {
        printf("El estado del puerto LPT1 es: 0x%02X\n", buffer);
    } else {
        printf("Error al leer el puerto LPT1.\n");
    }
 
    // Cerrar el puerto
    CloseHandle(hPuerto);
    return 0;
}

Notas importantes:


- Permisos: Asegúrate de que tu aplicación tenga los permisos necesarios para acceder al puerto. Puede que necesites ejecutar tu programa como administrador.
- Controladores: En algunos sistemas, puede que necesites un controlador específico para acceder a los puertos paralelos, especialmente en sistemas operativos más recientes.
- Compatibilidad: Este código está diseñado para funcionar en un entorno Win32. Si estás trabajando en un sistema operativo más moderno (como Windows 10), ten en cuenta que el soporte para puertos paralelos puede ser limitado.

Conclusión


Acceder directamente a los puertos de hardware en un entorno Win32 es diferente a hacerlo en Turbo C++. Utilizando la API de Windows, puedes interactuar con el puerto paralelo de manera segura y controlada. Asegúrate de manejar adecuadamente los permisos y las configuraciones del sistema para evitar problemas de acceso. ¡Buena suerte, Aleister!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar