Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Alitohq

#1
Tengo una impresora que puede imprimir código de barras.

Tengo, por otro lado, que leer un archivo (binario) que es el que tiene el texto más otros bytes (especiales, de impresión, como por ejemplo el caracter que determina que 'empieza un codigo de barras').

Quiero leer el archivo, levantarlo a un stream, parsear esos bytes y buscar, por ejemplo, ese byte que determina cuando empieza un codigo de barra (en mi protocolo es 0x14) y reemplazarlo por otros 3 bytes que son los que realmente usa la impresora que tengo en este momento.

Mi problema (pongo el codigo al final) es que si el archivo lo levanto del disco, no lo toco, Y LO MANDO INMEDIATAMENTE A IMPRESORA, el código de barras se imprime perfecto (lo mismo si uso, por ejemplo, en el command promt: print c:\test lpt).
Ahora, si lo que quiero es empezar a editar el contenido del archivo para poner los bytes que corresponden, cuando los mando a la impresora, me termina imprimiendo texto en vez del código de barras..


    static void ImprimirArchivo(unsigned char* path)
    {
        std::ifstream input((char*)path, std::ios::binary);
        std::ofstream output("lpt1", std::ios::binary);

        std::istreambuf_iterator<char> eos;
        std::istreambuf_iterator<char> streamInputIterator (input.rdbuf());

        bool codeBarStarted = false;
        int iterationsCounter = 0;
        while(streamInputIterator!=eos)
        {
            if(*streamInputIterator == 0x14)
            {
                output << '1d';
                output << '6b';
                output << '05';
                codeBarStarted = true;
            }
            else
            {
                output << *streamInputIterator;
            }

            if(codeBarStarted)
            {
                iterationsCounter++;
                if(iterationsCounter == 10)
                {
                    output << 0x00;
                    codeBarStarted = false;
                    iterationsCounter = 0;
                }
            }

            streamInputIterator++;
        }


por otro lado, en la parte de

            if(*streamInputIterator == 0x14)
            {
                output << '1d';
                output << '6b';
                output << '05';
                codeBarStarted = true;
            }

si lo cambio por

            if(*streamInputIterator == 0x14)
            {
                output << 0x1d;
                output << 0x6b;
                output << 0x05;
                codeBarStarted = true;
            }


el resultado es radicalmente distinto. En el segundo caso (0xYZ), sale impreso ese valor como un numero en formato texto (ejemplo: donde dice 0x1d, sale impreso '29')

Alguien tiene alguna idea de por qué no estoy pudiendo hacer esto que quiero? CUALQUIER pista es agradecida, porque estoy perdidísimo.
#2
Hola a todo el mundo, primer post y ya vengo a romper los huevos.

Quería saber si alguien que esté bien en tema podría tirarme una linea.

Estoy en Qt, un framework de C++, y me gustaría diseñar una aplicación "genérica" o dinámica, que levante módulos que yo desarrollé.

Básicamente, tengo una aplicación que, cuando se ejecuta, lee un XML el cual le dice que módulos hay instalados, y el path donde están instalados. En base a eso, genera una cantidad n de botones (Tantos botones como módulos haya descriptos en el XML).

Esa es la parte boluda, lo complicado ahora es que no tengo pálida idea de como desarrollar esos "módulos".

Hasta ahora tengo dos jueguitos pedorros con QGL (una abstracción de OpenGL de Qt), un Tetris y un Snake. Ambos dos son aplicaciones ejecutables en si mismas (.exe). Me gustaría que en vez de tener .EXEs, tener alguna otra forma de compilarlos, y poder utilizarlos como módulos para la primer aplicación genérica, la que crea botones en base al XML.

Cómo debería encarar el proyecto? Si fuese todo "estatico" en la aplicación ppal, simplemente hago unas DLL y después instancio mis juegos cuando me viene en gana, pero como todo esto es para poder hacer una aplicación "dinámica", no tiene sentido que rebuildeé la app principal cada vez que quito y agrego un juego nuevo.

Cómo encararian uds el diseño de esta app? Cómo funcionan los ADD-ONs en cosas como Firefox o Visual Studio? Yo no quiero que mi Tetris y Snake sean apps independientes, sino que sean extensiones de esa app principal... y no sé como hacerlo.

Alguna idea o recomendación como para empezar a guiarme?

Desde ya, si no fui claro, redacté como el orto, no fui claro (de vuelta), no fui claro o NFC, díganme. Cualquier ayuda se agradece.

Un saludo.