uso de libs externas em Harbour / MinGw
Moderador: Moderadores
- rosalvo rosa
- Usuário Nível 3

- Mensagens: 156
- Registrado em: 10 Jan 2006 19:21
- Localização: Curitiba - PR
uso de libs externas em Harbour / MinGw
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
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
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
uso de libs externas em Harbour / MinGw
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.
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.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- rosalvo rosa
- Usuário Nível 3

- Mensagens: 156
- Registrado em: 10 Jan 2006 19:21
- Localização: Curitiba - PR
uso de libs externas em Harbour / MinGw
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
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
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
uso de libs externas em Harbour / MinGw
Ola!
Favor usar a lib HBZEBRA para esta finalidade.
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.
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 ) }, ... )
Mais fácil do que isso só mastigando água.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- rosalvo rosa
- Usuário Nível 3

- Mensagens: 156
- Registrado em: 10 Jan 2006 19:21
- Localização: Curitiba - PR
uso de libs externas em Harbour / MinGw
Itamar, estamos quase chegando lá... as vezes mastigar água não é tão fácil quanto parece.
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
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
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
uso de libs externas em Harbour / MinGw
Olha é apenas um exemplo.
AJusta essas linhas abaixo, e coloca uma impressora que existem cadastrada no seu sistema.
Saudações,
Itamar M. Lins Jr.
AJusta essas linhas abaixo, e coloca uma impressora que existem cadastrada no seu sistema.
Aqui eu tenho o OneNote 2007, para não gastar papel atoa.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 )
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
-
esbaptista
- Usuário Nível 1

- Mensagens: 20
- Registrado em: 06 Fev 2007 10:37
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
uso de libs externas em Harbour / MinGw
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.
Eu não uso há muito tempo o Linux, não posso ajudar mais do que isso.
Saudações,
Itamar M. Lins Jr.
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
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- rosalvo rosa
- Usuário Nível 3

- Mensagens: 156
- Registrado em: 10 Jan 2006 19:21
- Localização: Curitiba - PR
uso de libs externas em Harbour / MinGw
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 :
Fora o meu conhecimento que é fraco nesta área, tem mais alguma coisa que está faltando ?
Um abraço.
Rosalvo
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
Um abraço.
Rosalvo