Puerto paralelo y Visual C++ 6

Aleister
23 de Mayo del 2003
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%Xhn",
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%Xhn",
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.

Oliverio
23 de Mayo del 2003
En Win32 no podes acceder directamente a los puertos, la manera correcta es a trabes de las API de Windows, ahora no me acuerdo el nombre de la funcion pero lo podes buscar en MSDN

Aleister
23 de Mayo del 2003
Gracias. Ya sospechaba algo así, empero no entiendo esa restricción ya que igual un programa para DOS (donde si se puede acceder directamente a la dirección 0x0408) se ejecuta en Win32.

Oliverio
23 de Mayo del 2003
En Win32 cada programa (tericamente) todos los recursos de tu maquina estan "virtualizados", para permitir la multitarea, en las vetanas DOS, cada programa se ejecuta en una maquina virtual que permite que el codigo que accede de manera fisica a la memoria crea que lo esta aciendo.
Bueno no me entendi ni yo, pero no importa, despues lo explico mejor