Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

02/12/2015 #1

Avatar de Meta

Hacer una interfaz puerto paralelo con Visual Basic 6
Hola amigos y amigas:

Hace un tiempo, gracias a los compañeros del foro he logrado hacer funcionar una intefaz controlando el puerto serie con Visual Basic 6, también hay otros lenguajes como indica en este tutorial aún en desarrollo.

Ver tutorial PDF (27 MB).

Ahora em han pedido mucha gente que haga lo mismo para controlar el puerto paralelo tanto entrada de datos como de salida, es decir, poder ver activados y desactivado las entradas del LPT como encender y apagar Led a su salida.

Hace años que hice un tutorial paso a paso con .net de varios lenguajes pero no de Visual Basic 6.

Ver tutorial puerto paralelo.

Me comentan que hay centros de enseñansas que obliga los profesores a los alumnos usar Visual Basic 6, impresionante que aún se siga usando a pesar de estar en el Visual Basic .net 2015 hoy en día desde hace muchos años. Quieren aprovechar sus máquinas viejas que incorporan aún puerto paralelo, por cierto, tengo un sobre mesa Pentium III a 933 MHz que incluye puerto paralelo, también un portatil viejo bajo XP son dicho puerto. También quiero aprovecharlo

Por eso les pido mucho consejos pro aquí que dominan este lenguaje VB 6 para el control del puerto paralelo.

¿Se necesita alguna librería en especial?
¿Se puede hacer directamente el control de un Led?
¿Se peude controlar directamente una entrada digital?

Todo esos detalles antes de empezar a hacer ejemplos para comprobar como funciona, luego haré un tutorial sobre ello tal como hice con el RS232 y VB 6 tal como indica en este PDF.

Un cordial saludo.
02/12/2015 #2

Avatar de juanma2468

Espero esto te pueda servir.
02/12/2015 #3

Avatar de Meta

Hola:

Muchas gracias.
Para dejarlo mejor preparado, dejo el enlace de la librerías que si hacen falta.
http://www.highrez.co.uk/Downloads/InpOut32/default.htm

Como indica en los vídeos de arriba, son salidas para encender y apagar Led, falta ejemplos de Visual Basic 6 a la hora de leer datos, como interruptores o pulsadores.

Otra cosa, buscando dibujos de un buen Led, uno apagado y otro encendido.
https://www.google.es/search?q=apaga...x1AewQ_AUIBigB

Si encuentran algo mejor de lo que he estado buscando, lo muestran por aquí.

Este ya no es tan fácil localizarlo.

¿Hay ordenadores o PC actuales que en la placa base tengan integrado el puerto paralelo?

El mio aunque no lo indica por detrás de la torre, viene clavijas para poner le puerto paralelo, hasta en la BIOS lo indica activado.

Saludos.
02/12/2015 #4

Avatar de papirrin

¿Hay ordenadores o PC actuales que en la placa base tengan integrado el puerto paralelo?
Si, todavia hay un monton, yo no se porque dicen que esta obsoleto

hacerlo con vb .net y hacerlo con VB6 es practicamente lo mismo, se usa la misma libreria, y hay un sinfin de informacion y proyectos.
02/12/2015 #5

Avatar de Meta

Hola:

Ya he encontrado dibujos para probar.
http://www.clker.com/clipart-green-led-off-1.html

Gracias por confirmar lo del puerto paralelo. Se dice que es obsoleto porque ya no se usa mucho actualmente en la simpresoras. Tengo una HP 930 C de puerto paralelo y puerto USB, deja ver en el futuro si con Arduino es capaz de controlarla al menos para imprimir un folio como experimento educativo.

Solo me falta un conector para el puerto paralelo, eso si, en tal caso de que nadie ya disponga ni dentro de la placa el puerto paralelo, usar tarjetas PCI que actualmente los fabrican.

El entorno no es lo mismo en VB .net que en VB 6, no hablo de la dll que es otra cosa, en ese casi si es lo mismo.

Saludos.
02/12/2015 #6

Avatar de papirrin

El entorno no es lo mismo en VB .net que en VB 6, no hablo de la dll que es otra cosa, en ese casi si es lo mismo
pero yo no dije que fuera lo mismo, yo dije que hacer el proyecto del puerto paralelo con vb6 es igual que hacerlo con vbnet, se utiliza la misma libreria. la programacion de la interfaz es muy muy similar pero nunca llega a ser lo mismo. por lo que entiendo si ya hiciste una con puerto serial en VBnet, haces nama mas la "traduccion" a vb6 y cambias el control comm por la libreria del puerto paralelo y ya esta. bueno yo no veo cual es la complicacion.
02/12/2015 #7


papirrin dijo: Ver Mensaje
Si, todavia hay un monton, yo no se porque dicen que esta obsoleto

hacerlo con vb .net y hacerlo con VB6 es practicamente lo mismo, se usa la misma libreria, y hay un sinfin de informacion y proyectos.
no no lo es


Meta dijo: Ver Mensaje

Solo me falta un conector para el puerto paralelo, eso si, en tal caso de que nadie ya disponga ni dentro de la placa el puerto paralelo, usar tarjetas PCI que actualmente los fabrican.
.
la libreria funciona usando direcciones de hardware asi que no es tan simple hacer lo de la tarjeta pci

de todos modos en la epoca del 486 pentiun 1 AT se usaban ese conector con pines e puerto
asi que si consiguen una chatarra de esa epoca probablemente les sirva el cable para su nueva placa
tambien el conector del cable serie sirve todavia

por que encontrarlo de nuevo en su tienda local es dificil probablemente el vendedor ni conozca el puerto paralelo



de todos modos cada vez menos placas traen ese puerto creo que ahora ninguna de las nuevas, asi que esta al borde de la obsolencia


y la tarjetas pci son para usarlas en los pocos perifericos industriales que quedan
y los adaptadores usb solo funcionan en impresoras

asi mejor aprendan a trabajar el puerto serie
02/12/2015 #8

Avatar de papirrin

no no lo es


me parece extraño, a lo mejor ya cambiaron los compiladores...

antes en el vb6.0 con la dll 32. se ponia asi:

Private Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As integer

Private Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

en VB.net:

se ponia asi:
Module Module1
Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
End Module

a mi eso me parece casi lo mismo, ¿porque dicen que no es casi lo mismo?

de todos modos cada vez menos placas traen ese puerto creo que ahora ninguna de las nuevas, asi que esta al borde de la obsolencia
es cierto que cada vez son menos, pero basta con poner en google mobo 2015 paralelo, y siguen saliendo motherboards nuevas y pues claro que no del nivel gamer o similar.

eso de que es obsoleto lo vengo viendo casi desde que aparecio el USB, hace no se que cuantas generaciones, y si es muy probable que deje de existir, pero van a apasar un par de generaciones mas para no encontrar ninguna, segun yo.
02/12/2015 #9

Avatar de Meta

Hola:

El LTP y RS232 son obsoletos, el que se usa son USB si o si. Lo que permanecerá en mucho tiempo, y ha si ha sido hasta ahora.

En cuanto a que el de la tienda no sepa que es eso del puerto paralelo en PCI, si lo saben, en tal caso que si me encuentro alguno, se lo explico por el aire, de todas maneras, por internet te lo venden por todas partes y nuevo.



Según me han contado, no hay problemas como has contado, tiene driver.

En mi placa como tiene el puerto LTP o paralelo integrado con sus pines, solo necesito esto.


[quote=papirrin;1068325]
analogico dijo: Ver Mensaje
no no lo es



me parece extraño, a lo mejor ya cambiaron los compiladores...

antes en el vb6.0 con la dll 32. se ponia asi:

Private Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As integer

Private Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

en VB.net:

se ponia asi:
Module Module1
Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
End Module

a mi eso me parece casi lo mismo, ¿porque dicen que no es casi lo mismo?
El tema de las dll si es el mismo, el lenguaje en si para hacer otras cosa no lo es. Otra cosa que cambia es que en VB 6 se puee usar en equipos muy viejos y en .net no, porque no lo permite, a pesar de ello, el VB 6 sigue en pie funcionando por todas partes.

Saludos.
02/12/2015 #10

Avatar de papirrin

El tema de las dll si es el mismo, el lenguaje en si para hacer otras cosa no lo es. Otra cosa que cambia es que en VB 6 se puee usar en equipos muy viejos y en .net no, porque no lo permite, a pesar de ello, el VB 6 sigue en pie funcionando por todas partes.
estamos hablando de lo mismo, pero el tema no es tratar las diferencias entre vb6 o vb.net, el tema como dice el titulo es el puerto "paralelo" y es lo que vengo diciendo desde el principio.
02/12/2015 #11


papirrin dijo: Ver Mensaje
me parece extraño, a lo mejor ya cambiaron los compiladores...


papirrin dijo: Ver Mensaje
hiciste una con puerto serial en VBnet, haces nama mas la "traduccion" a vb6 y cambias el control comm por la libreria del puerto paralelo y ya esta. bueno yo no veo cual es la complicacion.
papirrin dijo: Ver Mensaje
eso de que es obsoleto lo vengo viendo casi desde que aparecio el USB, hace no se que cuantas generaciones, y si es muy probable que deje de existir, pero van a apasar un par de generaciones mas para no encontrar ninguna, segun yo.
eso era para soportar el hardware antiguo,
pero ahora hasta la okidata 320 ahora tiene puerto usb

y con puerto de disquetera ya no hay


Meta dijo: Ver Mensaje
Hola:

El LTP y RS232 son obsoletos, el que se usa son USB si o si. Lo que permanecerá en mucho tiempo, y ha si ha sido hasta ahora.
pero para el rs232 siguen saliendo perifericos industriales, ademas del bluethoot y de que los convertidores serie-usb si sirven en las mayoria de los casos
ademas de hardware no-pc que incorpora puertos serie


Meta dijo: Ver Mensaje
.

En cuanto a que el de la tienda no sepa que es eso del puerto paralelo en PCI, si lo saben, en tal caso que si me encuentro alguno, se lo explico por el aire,
es que me a pasado y en esos casos mejor ir a otro lado
por que si no sabe como confiar en lo que venden


Meta dijo: Ver Mensaje
de todas maneras, por internet te lo venden por todas partes y nuevo.
por supuesto pero no a todos les acomoda o pueden comprar por internet



Meta dijo: Ver Mensaje
Según me han contado, no hay problemas como has contado, tiene driver.
para las tarjetas pci el driver no importa por que la dll accede a "bajo nivel" usando las direcciones de hardware estandar , habia una dll que permitia usar direcciones no estandar y la otra daba una pantalla azul solo que no recuerdo cual lo olvide
tambien hay tarjetas que se pueden configurar paraa que use alguna de las direcciones estandar, pero la mayoria de las que venden no son de esas


Meta dijo: Ver Mensaje
En mi placa como tiene el puerto LTP o paralelo integrado con sus pines, solo necesito esto.
si

Meta dijo: Ver Mensaje
El tema de las dll si es el mismo, el lenguaje en si para hacer otras cosa no lo es. Otra cosa que cambia es que en VB 6 se puee usar en equipos muy viejos y en .net no, porque no lo permite, a pesar de ello, el VB 6 sigue en pie funcionando por todas partes.

Saludos.
.net se puede usar en windows 98 y windows nt 4 o sea equipos viejos, mas viejo seria usar qbasic


bueno volviendo la tema recomiendo este codigo de vb6
http://www.todorobot.com.ar/usando-e...elo-de-una-pc/
lo probe hace años y funciona
05/12/2015 #12

Avatar de Meta

Hola:

Si sacan una tarjeta PCI y da problemas. ¿Para qué la sacan?
Será algunos modelos, por lo que he visto por ahí, funcionan muy bien.

Saludos.
05/12/2015 #13


Meta dijo: Ver Mensaje
Hola:

Si sacan una tarjeta PCI y da problemas. ¿Para qué la sacan?
Será algunos modelos, por lo que he visto por ahí, funcionan muy bien.

Saludos.
la tarjeta es para impresoras y otros hardwares no muy antiguos
que acceden al puerto a travez del driver de la tarjeta


la libreria que se usa en visual basic accede al puerto usando las direcciones de memoria
(0x378) estandar definidas en el ibm-pc original que son fijas y se configuran en el bios
o sea directo al hardware como se hacia en la epoca antigua

la tarjeta usa cualquier direccion y cualquier irq disponible y eso da problemas
06/12/2015 #14

Avatar de Meta

Hola:

Habrá que conseguir librerías que te deje modificar la dirección. Las placas más modernas, desde la BIOS, hay entradas que puedes cambiarlas por salidas, por eso el problema y hay que saber lo que se hace.

Se mira la dirección que dices a ver cual usa en el propio Windwos en Administrador de dispositivo, luego lo programas tal cual indica, no debe haber problemas. Página 27 de este tutorial.

http://www.slideshare.net/Metaconta2...o-paralelo-lpt

De todas maneras, está el código fuente de las librerías.
http://www.highrez.co.uk/Downloads/InpOut32/default.htm

Encontré algo de Visual Basic 6 y puerto paralelo.
http://www.slideshare.net/eddyvini/t...xt_slideshow=1

Una parodia graciosa.

Saludos.
06/12/2015 #15

Avatar de papirrin

Para cambiar la dirección tienes que configurar el puerto desde el BIOS como E/S (casi ya no hay unidireccionales) y desde VB le das la dirección al pin 2al 9 ya sea de entrada o salida, dentro de los 25 pines hay 4 de entrada y otros tantos de salida que no se pueden cambiar, la verdad no recuerdo cuantos son con exactitud ni cual instrucción se envía con inpout32, pero repito que hay muchísima información.
06/12/2015 #16


Meta dijo: Ver Mensaje
Se mira la dirección que dices a ver cual usa en
el propio Windwos en Administrador de dispositivo, luego lo programas tal cual indica, no debe haber problemas. Página 27 de este tutorial.

Saludos.
que facil no...
pero por ejemplo si hacen eso con el software de todorobot con una tarjeta pci obtendran una pantalla azul


el tutorial ese esta hecho con un puerto integrado en la placa y configurado desde el bios
en ese caso no tendran ningun problema



papirrin dijo: Ver Mensaje
Para cambiar la dirección tienes que configurar el puerto desde el BIOS como E/S (casi ya no hay unidireccionales) y desde VB le das la dirección al pin 2al 9 ya sea de entrada o salida, dentro de los 25 pines hay 4 de entrada y otros tantos de salida que no se pueden cambiar, la verdad no recuerdo cuantos son con exactitud ni cual instrucción se envía con inpout32, pero repito que hay muchísima información.
las direcciones de las tarjetas pci no salen en las bios,

pero no hay que cambiar nada con el puerto de la placa base solo tienen que colocar la direccion en el programa 0x378 o 0x278 y eso lo pueden ver en el administrador de dispositivos como dice el tutorial o desde la bios

y otro problema es que al arrancar la bios envia señales por el puerto, las que activan involuntariamente
el invento que le tengan conectado
06/12/2015 #17

Avatar de Meta

analogico dijo: Ver Mensaje

el tutorial ese esta hecho con un puerto integrado en la placa y configurado desde el bios
en ese caso no tendran ningun problema

Entendido.

las direcciones de las tarjetas pci no salen en las bios,

Eso seguro. Habrá que cambiar. Tendré que investigar

pero no hay que cambiar nada con el puerto de la placa base solo tienen que colocar la direccion en el programa 0x378 o 0x278 y eso lo pueden ver en el administrador de dispositivos como dice el tutorial o desde la bios

Entendido.

y otro problema es que al arrancar la bios envia señales por el puerto, las que activan involuntariamente
el invento que le tengan conectado

Eso suena peligro, habría que preogramar el dispositivo externo que al detectar la fuente cuando se enciende el ordenador o PC, protergerte unos bueno segundos para que ignoren esas entradaso salidas.
Habria que ver que pone en Administrador de positivo, la dirección, en la PCI te lo tiene que dar, precisamente no tiene que ser el que la placa integrada, al guna dirección te tiene quedar. Cuando te de una dirección, usarás esa, por eso en el tutorial te deja cambiarlo, por si tienes otra.

Corregirme si me equivoco.
06/12/2015 #18


Meta dijo: Ver Mensaje
Habria que ver que pone en Administrador de positivo, la dirección, en la PCI te lo tiene que dar, precisamente no tiene que ser el que la placa integrada, al guna dirección te tiene quedar. Cuando te de una dirección, usarás esa, por eso en el tutorial te deja cambiarlo, por si tienes otra.

Corregirme si me equivoco.
claro que la direccion de la tarjeta pci en el administrador de dispositivos el problema es que al usar esa direccion con el programam en vb y la libreria da una pantalla azul


en el tutorial deja cambiarla pero eso es para puertos integrados y sus direcciones standar
es que antes habian placas base con varios puertos paralelos
06/12/2015 #19

Avatar de Meta

Hola:

No te había entendido. En esas DLL, usa la dirección del que marca la BIOS si o si. ¿Te refieres a eso?

Tengo unas ganas de conseguir esa tarje PCI si o si, con serie incluido por si acaso.


Por suerte, presentan el código fuente de las librerías dll.
http://logix4u.net/parallel-port/26-...-win-xp-64-bit

Hay que mirar archivos por archivos del código fuente.
Código:
// inpout32drv.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "hwinterfacedrv.h"
#include "resource.h"
#include "conio.h"
#include "stdlib.h" 

int inst(LPCTSTR pszDriver);
int start(LPCTSTR pszDriver);

//First, lets set the DRIVERNAME depending on our configuraiton.
#define DRIVERNAMEx64 "hwinterfacex64\0"
#define DRIVERNAMEi386 "hwinterface\0"

char str[10];
int vv;

HANDLE hdriver=NULL;
char path[MAX_PATH];
HINSTANCE hmodule;
SECURITY_ATTRIBUTES sa;
int sysver;

int Opendriver(BOOL bX64);
void Closedriver(void);

BOOL APIENTRY DllMain( HINSTANCE  hModule, 
                      DWORD  ul_reason_for_call, 
                      LPVOID lpReserved
                      )
{

    hmodule = hModule;
    switch(ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        sysver = SystemVersion();
        if(sysver==2)
        {
            Opendriver(IsXP64Bit());
        }
        break;
    case DLL_PROCESS_DETACH:
        if(sysver==2)
        {
            Closedriver();
        }
        break;
    }
    return TRUE;
}

/***********************************************************************/

void Closedriver(void)
{
    if (hdriver)
    {
        OutputDebugString("Closing driver...\n");
        CloseHandle(hdriver);
        hdriver=NULL;
    }
}

void _stdcall Out32(short PortAddress, short data)
{

    switch(sysver)
    {
    case 1:
#ifdef _M_IX86
        _outp( PortAddress,data);    //Will ONLY compile on i386 architecture
#endif
        break;
    case 2:
        unsigned int error;
        DWORD BytesReturned;        
        BYTE Buffer[3];
        unsigned short * pBuffer;
        pBuffer = (unsigned short *)&Buffer[0];
        *pBuffer = LOWORD(PortAddress);
        Buffer[2] = LOBYTE(data);

        error = DeviceIoControl(hdriver,
            IOCTL_WRITE_PORT_UCHAR,
            &Buffer,
            3,
            NULL,
            0,
            &BytesReturned,
            NULL);
        break;
    }


}

/*********************************************************************/

short _stdcall Inp32(short PortAddress)
{
    BYTE retval(0);
    switch(sysver)
    {
    case 1:
#ifdef _M_IX86
        retval = _inp(PortAddress);
#endif
        return retval;
        break;
    case 2:
        unsigned int error;
        DWORD BytesReturned;
        unsigned char Buffer[3];
        unsigned short * pBuffer;
        pBuffer = (unsigned short *)&Buffer;
        *pBuffer = LOWORD(PortAddress);
        Buffer[2] = 0;
        error = DeviceIoControl(hdriver,
            IOCTL_READ_PORT_UCHAR,
            &Buffer,
            2,
            &Buffer,
            1,
            &BytesReturned,
            NULL);

        return((int)Buffer[0]);

        break;
    }
    return 0;
}

/*********************************************************************/

int Opendriver(BOOL bX64)
{
    OutputDebugString("Attempting to open InpOut driver...\n");

    char szFileName[MAX_PATH] = {NULL};
    if (bX64)
        strcpy_s(szFileName, MAX_PATH, "\\\\.\\hwinterfacex64");    //We are 64bit...
    else
        strcpy_s(szFileName, MAX_PATH, "\\\\.\\hwinterface");        //We are 32bit...

    hdriver = CreateFile(szFileName, 
        GENERIC_READ | GENERIC_WRITE, 
        0, 
        NULL,
        OPEN_EXISTING, 
        FILE_ATTRIBUTE_NORMAL, 
        NULL);

    if(hdriver == INVALID_HANDLE_VALUE) 
    {
        if(start(bX64 ? DRIVERNAMEx64 : DRIVERNAMEi386))
        {
            inst(bX64 ? DRIVERNAMEx64 : DRIVERNAMEi386);
            start(bX64 ? DRIVERNAMEx64 : DRIVERNAMEi386);

            hdriver = CreateFile(szFileName, 
                GENERIC_READ | GENERIC_WRITE, 
                0, 
                NULL,
                OPEN_EXISTING, 
                FILE_ATTRIBUTE_NORMAL, 
                NULL);

            if(hdriver != INVALID_HANDLE_VALUE) 
            {
                OutputDebugString("Successfully opened ");
                OutputDebugString(bX64 ? DRIVERNAMEx64 : DRIVERNAMEi386);
                OutputDebugString(" driver");
                return 0;
            }
        }
        return 1;
    }
    OutputDebugString("Successfully opened ");
    OutputDebugString(bX64 ? DRIVERNAMEx64 : DRIVERNAMEi386);
    OutputDebugString(" driver");
    return 0;
}

/***********************************************************************/
int inst(LPCTSTR pszDriver)
{
    char szDriverSys[MAX_PATH];
    strcpy_s(szDriverSys, MAX_PATH, pszDriver);
    strcat_s(szDriverSys, MAX_PATH, ".sys\0");
    
    SC_HANDLE  Mgr;
    SC_HANDLE  Ser;
    GetSystemDirectory(path , sizeof(path));
    HRSRC hResource = FindResource(hmodule, MAKEINTRESOURCE(IDR_BIN1), "bin");
    if(hResource)
    {
        HGLOBAL binGlob = LoadResource(hmodule, hResource);

        if(binGlob)
        {
            void *binData = LockResource(binGlob);

            if(binData)
            {
                HANDLE file;
                strcat_s(path, sizeof(path), "\\Drivers\\");
                strcat_s(path, sizeof(path), szDriverSys);
            
                file = CreateFile(path,
                    GENERIC_WRITE,
                    0,
                    NULL,
                    CREATE_ALWAYS,
                    0,
                    NULL);

                if(file)
                {
                    DWORD size, written;

                    size = SizeofResource(hmodule, hResource);
                    WriteFile(file, binData, size, &written, NULL);
                    CloseHandle(file);

                }
            }
        }
    }

    Mgr = OpenSCManager (NULL, NULL,SC_MANAGER_ALL_ACCESS);
    if (Mgr == NULL)
    {                            //No permission to create service
        if (GetLastError() == ERROR_ACCESS_DENIED) 
        {
            return 5;  // error access denied
        }
    }    
    else
    {
        char szFullPath[MAX_PATH] = "System32\\Drivers\\\0";
        strcat_s(szFullPath, MAX_PATH, szDriverSys);
        Ser = CreateService (Mgr,                      
            pszDriver,                        
            pszDriver,                        
            SERVICE_ALL_ACCESS,                
            SERVICE_KERNEL_DRIVER,             
            SERVICE_SYSTEM_START,               
            SERVICE_ERROR_NORMAL,               
            szFullPath,  
            NULL,                               
            NULL,                              
            NULL,                               
            NULL,                              
            NULL                               
            );
    }
    CloseServiceHandle(Ser);
    CloseServiceHandle(Mgr);

    return 0;
}
/**************************************************************************/
int start(LPCTSTR pszDriver)
{
    SC_HANDLE  Mgr;
    SC_HANDLE  Ser;

    Mgr = OpenSCManager (NULL, NULL,SC_MANAGER_ALL_ACCESS);

    if (Mgr == NULL)
    {                            //No permission to create service
        if (GetLastError() == ERROR_ACCESS_DENIED) 
        {
            Mgr = OpenSCManager (NULL, NULL,GENERIC_READ);
            Ser = OpenService(Mgr,pszDriver,GENERIC_EXECUTE);
            if (Ser)
            {    // we have permission to start the service
                if(!StartService(Ser,0,NULL))
                {
                    CloseServiceHandle (Ser);
                    return 4; // we could open the service but unable to start
                }

            }

        }
    }
    else
    {// Successfuly opened Service Manager with full access
        Ser = OpenService(Mgr,pszDriver,GENERIC_EXECUTE);
        if (Ser)
        {
            if(!StartService(Ser,0,NULL))
            {
                CloseServiceHandle (Ser);
                return 3; // opened the Service handle with full access permission, but unable to start
            }
            else
            {
                CloseServiceHandle (Ser);
                return 0;
            }
        }
    }
    return 1;
}
No digo que sea este precisamente. Si está la dirección del puerto paralelo ahí, entonces cambiar dicha dirección que tendrá en la LTP de la PCI y probar.

Voy a investigar más a fondo.


Edito:

He estado urgando, parece ser que es esta parte lo que te refieres.


Ver zoom.

Código:
#define IOCTL_READ_PORT_UCHAR     -1673519100 //CTL_CODE(40000, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_WRITE_PORT_UCHAR     -1673519096 //CTL_CODE(40000, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS)
Más información de las direcciones.
https://es.wikipedia.org/wiki/Puerto_paralelo

Una vez localizado. ¿Ahora qué?

Saludos.
06/12/2015 #20


Meta dijo: Ver Mensaje
Hola:

No te había entendido. En esas DLL, usa la dirección del que marca la BIOS si o si. ¿Te refieres a eso?
.
NOOO
esas dll funcionan con las direcciones estandar para los puertos paralelos
378 278 3bc
al usar una direccion no estandar ocurre un bloqueo a nivel de sistema operativo xp

la direccion no esta en elcodigo por que se pasa como parametro desde el vb




pero prueba con esa dll modificada en una esa si funciona
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.