Page 2 of 3

PostPosted: Mon Nov 13, 2006 9:59 am
by pymsoft
Antonio: puedo enviarte los .lib a ver si tu los puedes hacer funcionar? porque de repente soy yo que no logra hacerlo funcionar, capaz que me falta hacer algo, no lo se.

PostPosted: Mon Nov 13, 2006 5:49 pm
by Antonio Linares
Pedro,

Envíamelos en un ZIP, gracias

PostPosted: Tue Nov 14, 2006 8:49 am
by pymsoft
enviado a tu privado.


gracias.

PostPosted: Wed Nov 15, 2006 8:43 am
by pymsoft
Antonio: me han enviado las nuevas librerias creadas para ARMV4, pero me sigue dando errores.

Code: Select all  Expand view
teve.c
   Creating library teve.lib and object teve.exp
teve.obj : error LNK2019: unresolved external symbol "int __cdecl Prt_TestPrint(
void)" (?Prt_TestPrint@@YAHXZ) referenced in function "void __cdecl HB_FUN_PRT_T
ESTPRINT(void)" (?HB_FUN_PRT_TESTPRINT@@YAXXZ)
teve.exe : fatal error LNK1120: 1 unresolved externals




Mi funcion:

Code: Select all  Expand view
#pragma BEGINDUMP

#include <hbapi.h>
#include <windows.h>
//#include <c:\lavwin\teve\mobitron\inc\printer.h>
#include <c:\lavwin\teve\mobitron\inc\printerNET.h>

int Prt_TestPrint( void );

HB_FUNC( PRT_TESTPRINT )
{
   hb_retnl( Prt_TestPrint() );
}

#pragma ENDDUMP


y esto lo agregué en buildce.bat


Code: Select all  Expand view
echo \lavwin\teve\mobitron\lib\printerNET.lib >> msvc.tmp
echo \lavwin\teve\mobitron\lib\printerAPI.lib >> msvc.tmp

PostPosted: Wed Nov 15, 2006 8:59 am
by Antonio Linares
Pedro,

Haz este cambio:

extern "C" {
int Prt_TestPrint( void );
}

En la nueva versión de FWPPC ya no es preciso, ya que no se compila en modo C++ (flag -TP).

PostPosted: Wed Nov 15, 2006 10:11 am
by pymsoft
Antonio: supongo que tenia que dejarlo asi:
Pero sigue sin funcionar


Code: Select all  Expand view
#pragma BEGINDUMP

#include <hbapi.h>
#include <windows.h>
#include <c:\lavwin\teve\mobitron\inc\printer.h>

extern "C" {
int Prt_TestPrint( void );
}

HB_FUNC( PRT_TESTPRINT )
{
   hb_retnl( Prt_TestPrint() );
}

#pragma ENDDUMP



El error:

Code: Select all  Expand view

teve.obj : error LNK2019: unresolved external symbol Prt_TestPrint referenced in
function "void __cdecl HB_FUN_PRT_TESTPRINT(void)" (?HB_FUN_PRT_TESTPRINT@@YAXX
Z)


PostPosted: Wed Nov 15, 2006 11:56 am
by Antonio Linares
Pedro,

Si revisas la LIB por dentro, con un editor binario, verás que el nombre de la función es distinto:
Code: Select all  Expand view
#pragma BEGINDUMP

#include <hbapi.h>
#include <windows.h>
#include <c:\lavwin\teve\mobitron\inc\printer.h>

extern "C" {
int PRT_TestPrint( void );
}

HB_FUNC( PRT_TESTPRINT )
{
   hb_retnl( PRT_TestPrint() );
}

#pragma ENDDUMP

PostPosted: Wed Nov 15, 2006 1:06 pm
by pymsoft
Antonio, (parece una pesadilla)

Revisé la lib por dentro (printerApi.lib) y lo veo escrito asi:

Prt_TestPrint



por lo cual escribí el codigo asi:

Code: Select all  Expand view
#pragma BEGINDUMP

#include <hbapi.h>
#include <windows.h>
#include <c:\lavwin\teve\mobitron\inc\printer.h>

extern "C" {
int Prt_TestPrint( void );
}

HB_FUNC( PRT_TESTPRINT )
{
   hb_retnl( Prt_TestPrint() );
}

#pragma ENDDUMP



agregada la libreria en buildce.bat


al compilar me da este error:

teve.c
Creating library teve.lib and object teve.exp
teve.obj : error LNK2019: unresolved external symbol Prt_TestPrint referenced in
function "void __cdecl HB_FUN_PRT_TESTPRINT(void)" (?HB_FUN_PRT_TESTPRINT@@YAXX
Z)
teve.exe : fatal error LNK1120: 1 unresolved externals






P.D. Tu pudiste compilarlo y no te da errores?

PostPosted: Wed Nov 15, 2006 5:54 pm
by Antonio Linares
Pedro,

Tienes clases en C++ dentro de la libreria!:
Code: Select all  Expand view
class __declspec(dllexport) CPrinter 
{
public:
//   INT Prt_CheckCover(BOOL *blCover);
   INT Prt_CheckHeadTemper(BOOL *blTemper);
   INT Prt_CheckPaper(BOOL *blPaper);
   INT WriteBitmap_BelowStandard(LPCTSTR bmFile);
   INT Prt_BackFeed(int n);
   INT getSerialProperty(DCB *lpDcb);
   INT PrinterDeSelect(HANDLE prt_pHandle);
   INT Prt_PortOpen();
   INT Prt_PortRelease();
   INT Prt_PrintBarcode(char *barData, int height, int width, int barcodeSystem, int codeHRI);
   INT Prt_CheckStatus(PRT_STATUS * status);
   INT Prt_TestPrint();
                ...

Vas a tener que instanciar un objeto en C++ y usarlo desde tu aplicación.

Prueba esto:
Code: Select all  Expand view
#pragma BEGINDUMP

#include "hbapi.h"
#include "Printer.h"  // de los ficheros que te han enviado

HB_FUNC( PRT_TESTPRINT )
{
   CPrinter * printer = new CPrinter;

   printer->Prt_TestPrint();
}

#pragma ENDDUMP

PostPosted: Wed Nov 15, 2006 6:15 pm
by pymsoft
Antonio: ahora compila sin errores.

hago la prueba de imprimir y no imprime, supongo que porque tengo que abrir la impresora luego hacer el test y luego cerrarla, lo hago de este modo, pero tampoco funciona, alguna idea?

Code: Select all  Expand view
#pragma BEGINDUMP

#include "hbapi.h"
#include "windows.h"
#include "c:\lavwin\teve\mobitron\inc\Printer.h"

HB_FUNC( PRT_TESTPRINT )
{
   CPrinter * printer = new CPrinter;

   printer->Prt_Open();
   printer->Prt_TestPrint();
   printer->Prt_Close();
}

#pragma ENDDUMP


Que estoy haciendo mal?

Gracias

PostPosted: Wed Nov 15, 2006 6:38 pm
by Antonio Linares
Pedro,

Tendrás que revisar la documentación de ese producto y los ejemplos que proporcionan para ver como es la secuencia correcta de llamadas.

PostPosted: Thu Nov 16, 2006 8:27 am
by pymsoft
Antonio,

la secuencia sería como està escrito en el codigo que te enviè antes. La pregunta es: esta bien escrito lo que puse?, porque por lo que entiendo, las llamadas a open, printest y close son metodos de la clase print, es asi?

gracias

PostPosted: Thu Nov 16, 2006 9:29 am
by Antonio Linares
Pedro,

Sí, tu código es correcto.

PostPosted: Thu Nov 16, 2006 9:40 am
by pymsoft
Antonio,


Gracias


Voy a tratar de entender entonces por cual motivo no funciona, voy a usar el beep que es mas simple para hacer las pruebas.

PostPosted: Thu Nov 16, 2006 10:34 am
by pymsoft
Antonio,


La clase Beep funciona :D

Code: Select all  Expand view

***************
STATIC FUNCTION ProvaStampa()
***************
LOCAL i

FOR i := 1 TO 100
  Beep_on( 200 + i * 100, 100 )
NEXT

RETURN NIL
*
** eof ProvaStampa


#pragma BEGINDUMP

#include "hbapi.h"
#include "windows.h"
#include "c:\lavwin\teve\mobitron\inc\Printer.h" 
#include "c:\lavwin\teve\mobitron\inc\Beep.h" 

HB_FUNC( PRT_TESTPRINT )
{
   CPrinter * printer = new CPrinter;

   printer->Prt_Open();
   printer->Prt_TestPrint();
   //printer->Prt_Close();
}


HB_FUNC( BEEP_ON )
{
   CBeep * Beep = new CBeep;

   Beep->Beep_On( hb_parni(1), hb_parni(2));

}

#pragma ENDDUMP





Ahora voy a tratar de entender por que no funciona la impresora.
Te agradezco muchisimo tu ayuda para resolver mi problema.
Ahora, a aprender un poco de C++....