Página 1 de 1

uso de libs externas em Harbour / MinGw

Enviado: 09 Jul 2011 20:37
por rosalvo rosa
Olá amigos.

Para usar uma lib gerada originalmente em Clipper ou xHarbour, como que eu faço para poder utilizá-la em
Harbour / MinGw ?

Por ex:

Em Harbour/MinGw eu uso uma lib do Harbour : LIBHBEXTERN.A
e a chamo no hbmk2 assim : -LHBEXTERN

Ao linkar em Harbour / MinGw uma lib gerada em Clipper, digamos, MINHALIB.LIB, o HBMk2 me diz que o seu formato
não é reconhecido.

O mesmo para Lib´s de xHarbour

Por ex:
Eu quero usar a lib What32.Lib do xHarbour

Como posso fazer ?

Tenho certeza que o Itamar poderá me ajudar. Ou outro colega que também saiba.

Obrigado

Rosalvo

uso de libs externas em Harbour / MinGw

Enviado: 10 Jul 2011 07:15
por Itamar M. Lins Jr.
Impossível, não pode.
Mesmo que a lib do Xharbour seja linkada com o Mingw, não pode ser chamada pelo Harbour compilado com o mesmo compilador Mingw.
E observe que estas querendo usar libs com compiladores diferentes misturar BCC com Mingw mais ainda o Xharbour com Harbour.
As boas coisas do What32 já se encontra todas no Harbour, e ainda tem muito mais funções que no What32 não tem.
Neste caso o melhor a fazer é especificar quais funções que precisas usar para podermos procurar similares no Harbour.

Saudações,
Itamar M. Lins Jr.

uso de libs externas em Harbour / MinGw

Enviado: 11 Jul 2011 10:06
por rosalvo rosa
Olá Itamar !

No meu caso, eu precisaria da lib What32.lib para usar as funções ADDFONTRESOURCE e REMOVEFONTRESOURCE.

Seria para imprimir código de barras, uma vez que eu uso o Win32, e tem um exemplo no xHarbour que serve para
usar justamente com o Win32, só que precisaria destas funções.

Aguardo sua preciosa ajuda.

Rosalvo

uso de libs externas em Harbour / MinGw

Enviado: 11 Jul 2011 14:57
por Itamar M. Lins Jr.
Ola!
Favor usar a lib HBZEBRA para esta finalidade.

Código: Selecionar todos

/*
 * $Id: testwin.prg 15824 2010-11-13 18:57:30Z vszakats $
 */

/*
 * Harbour Project source code:
 *
 * Copyright 2010 Viktor Szakats (harbour.01 syenar.hu)
 * www - http://harbour-project.org
 *
 */

#include "hbzebra.ch"
#include "hbwin.ch"

PROCEDURE Main()
   LOCAL hDC
   LOCAL pDEVMODE := __wapi_DEVMODE_New( "Microsoft XPS Document Writer" )
   LOCAL hOBJECT

   __wapi_DEVMODE_Set( pDEVMODE, {;
      "dmPaperSize"   => WIN_DMPAPER_A4,;
      "dmOrientation" => WIN_DMORIENT_PORTRAIT } )

   hDC := wapi_CreateDC( NIL, "Microsoft XPS Document Writer", NIL, pDEVMODE )
   IF ! Empty( hDC )

      wapi_SetMapMode( hDC, WIN_MM_TEXT )

      IF wapi_StartDoc( hDC, { "lpszDocName" => "(barcode test)" } ) > 0

         wapi_SetBkMode( hDC, WIN_TRANSPARENT )

         IF wapi_StartPage( hDC ) > 0

            hOBJECT := wapi_CreateFont( 96,;
                                        42,;
                                        NIL,;
                                        NIL,;
                                        WIN_FW_NORMAL,;
                                        .F.,;
                                        .F.,;
                                        NIL,;
                                        WIN_ANSI_CHARSET,;
                                        NIL,;
                                        NIL,;
                                        NIL,;
                                        NIL,;
                                        "Arial" )

            wapi_SelectObject( hDC, hOBJECT )

            DrawBarcode( hDC,  20,   1, "EAN13",      "477012345678" )
            DrawBarcode( hDC,  40,   1, "EAN8",       "1234567" )
            DrawBarcode( hDC,  60,   1, "UPCA",       "01234567891" )
            DrawBarcode( hDC,  80,   1, "UPCE",       "123456" )
            DrawBarcode( hDC, 100,   1, "CODE39",     "ABC123" )
            DrawBarcode( hDC, 120,   1, "CODE39",     "ABC123", HB_ZEBRA_FLAG_CHECKSUM )
            DrawBarcode( hDC, 140, 0.5, "CODE39",     "ABC123", HB_ZEBRA_FLAG_CHECKSUM + HB_ZEBRA_FLAG_WIDE2_5 )
            DrawBarcode( hDC, 160,   1, "CODE39",     "ABC123", HB_ZEBRA_FLAG_CHECKSUM + HB_ZEBRA_FLAG_WIDE3 )
            DrawBarcode( hDC, 180,   1, "ITF",        "1234", HB_ZEBRA_FLAG_WIDE3 )
            DrawBarcode( hDC, 200,   1, "ITF",        "12345678901", HB_ZEBRA_FLAG_CHECKSUM )
            DrawBarcode( hDC, 220,   1, "MSI",        "1234" )
            DrawBarcode( hDC, 240,   1, "MSI",        "1234", HB_ZEBRA_FLAG_CHECKSUM + HB_ZEBRA_FLAG_WIDE3 )
            DrawBarcode( hDC, 260,   1, "MSI",        "1234567", HB_ZEBRA_FLAG_CHECKSUM )
            DrawBarcode( hDC, 280,   1, "CODABAR",    "40156", HB_ZEBRA_FLAG_WIDE3 )
            DrawBarcode( hDC, 300,   1, "CODABAR",    "-1234", HB_ZEBRA_FLAG_WIDE3 )
            DrawBarcode( hDC, 320,   1, "CODE93",     "ABC-123" )
            DrawBarcode( hDC, 340,   1, "CODE93",     "TEST93" )
            DrawBarcode( hDC, 360,   1, "CODE11",     "12", HB_ZEBRA_FLAG_WIDE3 )
            DrawBarcode( hDC, 380,   1, "CODE11",     "1234567890", HB_ZEBRA_FLAG_CHECKSUM + HB_ZEBRA_FLAG_WIDE3 )
            DrawBarcode( hDC, 400,   1, "CODE128",    "Code 128")
            DrawBarcode( hDC, 420,   1, "CODE128",    "1234567890")
            DrawBarcode( hDC, 440,   1, "CODE128",    "Wikipedia")
            DrawBarcode( hDC, 460,   1, "PDF417",     "Hello, World of Harbour!!! It's 2D barcode PDF417 :)" )
            DrawBarcode( hDC, 540,   1, "DATAMATRIX", "Hello, World of Harbour!!! It's 2D barcode DataMatrix :)")

            wapi_EndPage( hDC )
         ENDIF
         wapi_EndDoc( hDC )
      ENDIF
   ENDIF

   RETURN

#define _SCALE_ 7.2

PROCEDURE DrawBarcode( hDC, nY, nLineWidth, cType, cCode, nFlags )
   LOCAL hZebra, nLineHeight

   SWITCH cType
   CASE "EAN13"      ; hZebra := hb_zebra_create_ean13( cCode, nFlags )   ; EXIT
   CASE "EAN8"       ; hZebra := hb_zebra_create_ean8( cCode, nFlags )    ; EXIT
   CASE "UPCA"       ; hZebra := hb_zebra_create_upca( cCode, nFlags )    ; EXIT
   CASE "UPCE"       ; hZebra := hb_zebra_create_upce( cCode, nFlags )    ; EXIT
   CASE "CODE39"     ; hZebra := hb_zebra_create_code39( cCode, nFlags )  ; EXIT
   CASE "ITF"        ; hZebra := hb_zebra_create_itf( cCode, nFlags )     ; EXIT
   CASE "MSI"        ; hZebra := hb_zebra_create_msi( cCode, nFlags )     ; EXIT
   CASE "CODABAR"    ; hZebra := hb_zebra_create_codabar( cCode, nFlags ) ; EXIT
   CASE "CODE93"     ; hZebra := hb_zebra_create_code93( cCode, nFlags )  ; EXIT
   CASE "CODE11"     ; hZebra := hb_zebra_create_code11( cCode, nFlags )  ; EXIT
   CASE "CODE128"    ; hZebra := hb_zebra_create_code128( cCode, nFlags ) ; EXIT
   CASE "PDF417"     ; hZebra := hb_zebra_create_pdf417( cCode, nFlags ); nLineHeight := nLineWidth * 3 ; EXIT
   CASE "DATAMATRIX" ; hZebra := hb_zebra_create_datamatrix( cCode, nFlags ); nLineHeight := nLineWidth ; EXIT
   ENDSWITCH

   nY *= _SCALE_
   nLineWidth *= _SCALE_

   IF hZebra != NIL
      IF hb_zebra_geterror( hZebra ) == 0
         IF EMPTY( nLineHeight )
            nLineHeight := 16
         ENDIF
         wapi_TextOut( hDC,  40 * _SCALE_, nY, cType )
         wapi_TextOut( hDC, 150 * _SCALE_, nY, hb_zebra_getcode( hZebra ) )
         hb_zebra_draw_wapi( hZebra, hDC, wapi_CreateSolidBrush( 0 ), 300 * _SCALE_, nY, nLineWidth, nLineHeight * _SCALE_ )
      ELSE
         ? "Type", cType, "Code", cCode, "Error", hb_zebra_geterror( hZebra )
      ENDIF
      hb_zebra_destroy( hZebra )
   ELSE
      ? "Invalid barcode type", cType
   ENDIF

   RETURN

STATIC FUNCTION hb_zebra_draw_wapi( hZebra, hDC, hBrush, ... )

   IF hb_zebra_GetError( hZebra ) != 0
      RETURN HB_ZEBRA_ERROR_INVALIDZEBRA
   ENDIF

   RETURN hb_zebra_draw( hZebra, {| x, y, w, h | wapi_FillRect( hDC, { Int( x + .5 ), Int( y + .5 ), Int( x + .5 ) + Int( w ), Int( y + .5 ) + Int( h ) + 1 }, hBrush ) }, ... )
Acredito que ela tenha os tipos e tamanhos de códigos de barras que lhe atenda.
Mais fácil do que isso só mastigando água. :)

Saudações,
Itamar M. Lins Jr.

uso de libs externas em Harbour / MinGw

Enviado: 11 Jul 2011 18:05
por rosalvo rosa
Itamar, estamos quase chegando lá... as vezes mastigar água não é tão fácil quanto parece. :D
Eu fiz o que vc pediu, gerei o .exe com a lib HbZebra, tudo certo, beleza.

Mas quando executo o .exe dá a msg :
Argument error: __wapi_devmode_set
called from __wapimode_set(0)

Ele está me dizendo que a função está precisando alguma coisa que eu não estou informando, ou informando errado.

E eu não alterei o exemplo que vc postou.

Será que eu esqueci alguma coisa ?

Me dá essa mão aí.

Um abraço.

Rosalvo

uso de libs externas em Harbour / MinGw

Enviado: 11 Jul 2011 19:01
por Itamar M. Lins Jr.
Olha é apenas um exemplo.
AJusta essas linhas abaixo, e coloca uma impressora que existem cadastrada no seu sistema.
LOCAL pDEVMODE := __wapi_DEVMODE_New( "Enviar para o OneNote 2007" )//"Microsoft XPS Document Writer" )
LOCAL hOBJECT

__wapi_DEVMODE_Set( pDEVMODE, {;
"dmPaperSize" => WIN_DMPAPER_A4,;
"dmOrientation" => WIN_DMORIENT_PORTRAIT } )

hDC := wapi_CreateDC( NIL, "Enviar para o OneNote 2007", NIL, pDEVMODE )
Aqui eu tenho o OneNote 2007, para não gastar papel atoa.

Saudações,
Itamar M. Lins Jr.

uso de libs externas em Harbour / MinGw

Enviado: 12 Jul 2011 08:39
por esbaptista
como eu faria isso no Linux?!?

uso de libs externas em Harbour / MinGw

Enviado: 12 Jul 2011 11:51
por Itamar M. Lins Jr.
Ola!
Pelo que consta a HBZebra funciona no Linux. Lógico que o exemplo acima é para windows. No Linux usamos por exemplo o CUPS ou podemos imprimir para o hpdf e depois mandar para o CUPS.

Código: Selecionar todos

/*
 * $Id: testhpdf.prg 15824 2010-11-13 18:57:30Z vszakats $
 */

/*
 * Harbour Project source code:
 *
 * Copyright 2010 Viktor Szakats (harbour.01 syenar.hu)
 * www - http://harbour-project.org
 *
 */

#include "hbzebra.ch"
#include "harupdf.ch"

PROCEDURE Main()
   LOCAL pdf
   LOCAL page

   pdf := HPDF_New()
   page := HPDF_AddPage( pdf )
   HPDF_Page_SetSize( page, HPDF_PAGE_SIZE_A4, HPDF_PAGE_PORTRAIT )
   HPDF_Page_SetFontAndSize( page, HPDF_GetFont( pdf, "Helvetica", NIL ), 12 )

   DrawBarcode( page,  20,   1, "EAN13",      "477012345678" )
   DrawBarcode( page,  40,   1, "EAN8",       "1234567" )
   DrawBarcode( page,  60,   1, "UPCA",       "01234567891" )
   DrawBarcode( page,  80,   1, "UPCE",       "123456" )
   DrawBarcode( page, 100,   1, "CODE39",     "ABC123" )
   DrawBarcode( page, 120,   1, "CODE39",     "ABC123", HB_ZEBRA_FLAG_CHECKSUM )
   DrawBarcode( page, 140, 0.5, "CODE39",     "ABC123", HB_ZEBRA_FLAG_CHECKSUM + HB_ZEBRA_FLAG_WIDE2_5 )
   DrawBarcode( page, 160,   1, "CODE39",     "ABC123", HB_ZEBRA_FLAG_CHECKSUM + HB_ZEBRA_FLAG_WIDE3 )
   DrawBarcode( page, 180,   1, "ITF",        "1234", HB_ZEBRA_FLAG_WIDE3 )
   DrawBarcode( page, 200,   1, "ITF",        "12345678901", HB_ZEBRA_FLAG_CHECKSUM )
   DrawBarcode( page, 220,   1, "MSI",        "1234" )
   DrawBarcode( page, 240,   1, "MSI",        "1234", HB_ZEBRA_FLAG_CHECKSUM + HB_ZEBRA_FLAG_WIDE3 )
   DrawBarcode( page, 260,   1, "MSI",        "1234567", HB_ZEBRA_FLAG_CHECKSUM )
   DrawBarcode( page, 280,   1, "CODABAR",    "40156", HB_ZEBRA_FLAG_WIDE3 )
   DrawBarcode( page, 300,   1, "CODABAR",    "-1234", HB_ZEBRA_FLAG_WIDE3 )
   DrawBarcode( page, 320,   1, "CODE93",     "ABC-123" )
   DrawBarcode( page, 340,   1, "CODE93",     "TEST93" )
   DrawBarcode( page, 360,   1, "CODE11",     "12", HB_ZEBRA_FLAG_WIDE3 )
   DrawBarcode( page, 380,   1, "CODE11",     "1234567890", HB_ZEBRA_FLAG_CHECKSUM + HB_ZEBRA_FLAG_WIDE3 )
   DrawBarcode( page, 400,   1, "CODE128",    "Code 128")
   DrawBarcode( page, 420,   1, "CODE128",    "1234567890")
   DrawBarcode( page, 440,   1, "CODE128",    "Wikipedia")
   DrawBarcode( page, 460,   1, "PDF417",     "Hello, World of Harbour!!! It's 2D barcode PDF417 :)" )
   DrawBarcode( page, 540,   1, "DATAMATRIX", "Hello, World of Harbour!!! It's 2D barcode DataMatrix :)")

   FErase( "testhpdf.pdf" )
   ? HPDF_SaveToFile( pdf, "testhpdf.pdf" )

   RETURN

PROCEDURE DrawBarcode( page, nY, nLineWidth, cType, cCode, nFlags )
   LOCAL hZebra, nLineHeight

   nY := HPDF_Page_GetHeight( page ) - nY

   SWITCH cType
   CASE "EAN13"      ; hZebra := hb_zebra_create_ean13( cCode, nFlags )   ; EXIT
   CASE "EAN8"       ; hZebra := hb_zebra_create_ean8( cCode, nFlags )    ; EXIT
   CASE "UPCA"       ; hZebra := hb_zebra_create_upca( cCode, nFlags )    ; EXIT
   CASE "UPCE"       ; hZebra := hb_zebra_create_upce( cCode, nFlags )    ; EXIT
   CASE "CODE39"     ; hZebra := hb_zebra_create_code39( cCode, nFlags )  ; EXIT
   CASE "ITF"        ; hZebra := hb_zebra_create_itf( cCode, nFlags )     ; EXIT
   CASE "MSI"        ; hZebra := hb_zebra_create_msi( cCode, nFlags )     ; EXIT
   CASE "CODABAR"    ; hZebra := hb_zebra_create_codabar( cCode, nFlags ) ; EXIT
   CASE "CODE93"     ; hZebra := hb_zebra_create_code93( cCode, nFlags )  ; EXIT
   CASE "CODE11"     ; hZebra := hb_zebra_create_code11( cCode, nFlags )  ; EXIT
   CASE "CODE128"    ; hZebra := hb_zebra_create_code128( cCode, nFlags ) ; EXIT
   CASE "PDF417"     ; hZebra := hb_zebra_create_pdf417( cCode, nFlags ); nLineHeight := nLineWidth * 3 ; EXIT
   CASE "DATAMATRIX" ; hZebra := hb_zebra_create_datamatrix( cCode, nFlags ); nLineHeight := nLineWidth ; EXIT
   ENDSWITCH

   IF hZebra != NIL
      IF hb_zebra_geterror( hZebra ) == 0
         IF EMPTY( nLineHeight )
            nLineHeight := 16
         ENDIF
         HPDF_Page_BeginText( page )
         HPDF_Page_TextOut( page,  40, nY - 13, cType )
         HPDF_Page_TextOut( page, 150, nY - 13, hb_zebra_getcode( hZebra ) )
         HPDF_Page_EndText( page )
         hb_zebra_draw_hpdf( hZebra, page, 300, nY, nLineWidth, -nLineHeight )
      ELSE
         ? "Type", cType, "Code", cCode, "Error", hb_zebra_geterror( hZebra )
      ENDIF
      hb_zebra_destroy( hZebra )
   ELSE
      ? "Invalid barcode type", cType
   ENDIF

   RETURN

STATIC FUNCTION hb_zebra_draw_hpdf( hZebra, page, ... )

   IF hb_zebra_GetError( hZebra ) != 0
      RETURN HB_ZEBRA_ERROR_INVALIDZEBRA
   ENDIF

   hb_zebra_draw( hZebra, {| x, y, w, h | HPDF_Page_Rectangle( page, x, y, w, h ) }, ... )

   HPDF_Page_Fill( page )

   RETURN 0
Eu não uso há muito tempo o Linux, não posso ajudar mais do que isso.

Saudações,
Itamar M. Lins Jr.

uso de libs externas em Harbour / MinGw

Enviado: 12 Jul 2011 20:43
por rosalvo rosa
Itamar, boa noite!

Desculpe a insistência, é que realmente, eu não compreendo onde posso estar errando.

Eu fiz uma adaptação ao código, para captar a impressora, que é uma HP, e não consigo imprimir. A mesma trava e
o spooler fica perdido.

Veja :

Código: Selecionar todos

#include "hbzebra.ch"
#include "hbwin.ch"
PROCEDURE Main()
   cPrinter := GetDefaultPrinter()
   ImprimeCB(cPrinter)
Return
Func ImprimeCB(cPrinter)
   LOCAL hDC
   LOCAL pDEVMODE := __wapi_DEVMODE_New(cPrinter)
   LOCAL hOBJECT

   __wapi_DEVMODE_Set( pDEVMODE, {;
      "dmPaperSize"   => WIN_DMPAPER_A4,;
      "dmOrientation" => WIN_DMORIENT_PORTRAIT } )

   hDC := wapi_CreateDC( NIL,cPrinter, NIL, pDEVMODE )
   IF ! Empty( hDC )
   ... o resto continua igual

Fora o meu conhecimento que é fraco nesta área, tem mais alguma coisa que está faltando ?

Um abraço.

Rosalvo