Complemento:
Tem que saber mexer no Harbour, não na LIB, pra resolver questões de compilação.
Vamos lá na pasta hmg\samples\basics\multiwin
mgcompile *.prg *.rc -odemo
Generating C source output to 'c:\temp\miscproc.c'... Done.
d:\harbour\comp\mingw\bin\windres.exe: no resources
hbmk2: Error: Running resource compiler. 1
Deu erro, o que fizemos de errado?
O erro se refere a compilação de resource (arquivo RC), vamos olhar a pasta
20/04/2010 09:37 0 multiwin.rc
Se é tamanho zero, é o arquivo que está errado, não deveria existir.
d:\harbour\comp\mingw\bin\windres.exe: can't open file `C:\hmg.3.4.0\RESOURCES\Windows7.Manifest': Invalid argument
hbmk2: Error: Running resource compiler. 1
isso está em resource, então foi um arquivo de resource.
Vamos ver o comando no bat, pra ver o que ele adiciona de resource.
hbmk2 %* ^
%HB_MYGUI_PATH%\resources\hmg32.rc ^
ok, por essa variável sabemos a pasta e vamos lá no hmg32.rc
#include "_hmg_resconfig.h"
// MANIFEST FOR CREATE 'XP-STYLE' APPLICATIONS
1 24 HMGRPATH\Windows7.Manifest
HMG_FINGER CURSOR HMGRPATH\FINGER.CUR
HMG_DRAGLIST CURSOR HMGRPATH\DRAGLIST.CUR
HMG_DRAGUP CURSOR HMGRPATH\DRAGUP.CUR
HMG_DRAGDOWN CURSOR HMGRPATH\DRAGDOWN.CUR
Ok, ela tem um esquema próprio pra descobrir quais são as pastas.
Não precisa disso pro HBMK2, então só simplificar o arquivo
1 24 Windows7.Manifest
HMG_FINGER CURSOR FINGER.CUR
HMG_DRAGLIST CURSOR DRAGLIST.CUR
HMG_DRAGUP CURSOR DRAGUP.CUR
HMG_DRAGDOWN CURSOR DRAGDOWN.CUR
mgcompile *.prg -odemo
to `_HB_FUN_WIN_P2N'
d:/cvsfiles/hmgall/hmg/lib/win/mingw/libhmg.a(h_windows.o):h_windows.c:(.data+0x1458): undefined reference to `_HB_FUN_CALLDLL32'
collect2.exe: error: ld returned 1 exit status
hbmk2: Error: Running linker. 1
d:\harbour\comp\mingw\bin\gcc.exe c:/temp/demo.o c:/temp/miscproc.o c:/temp/hbmk_odoxys.o c:/temp/hmg32.reso -m32 -Wl,--no-demangle -mconsole -Wl,--start-group -lhmg -lhmg_tstring -lcrypt -ledit -leditex -lgraph -lhbvpdf -lreport -lmsvfw32 -lvfw32 -lhbct -lhbziparc -lhbmzip -lminizip -lhbwin -lpng -lhbmisc -lhbnf -lhbhpdf -lhpdf -lxhb -lhbextern -lhbdebug -lhbvmmt -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtstd -lgtpca -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lhbmainstd -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2_32 -liphlpapi -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lwinmm -lmapi32 -limm32 -lmsimg32 -lwininet -lhbpcre -lhbzlib -Wl,--end-group -s -odemo.exe -Ld:/harbour/lib/win/mingw -Ld:/cvsfiles/hmgall/hmg/lib/win/mingw
hbmk2: Hint: Correct possibly mistyped function name(s):
WIN_P2N() -> win_Prn()
hbmk2: Error: Referenced, missing, but unrecognized Harbour function(s):
WIN_P2N(), CALLDLL32()
hbmk2: Hint: Add input file 'xhb.hbc' instead of specifying raw library using
'-lxhb' or 'libs=xhb'.
lógico... temos que olhar isso de forma simplificada, só a parte que interessa
to `_HB_FUN_WIN_P2N'
d:/cvsfiles/hmgall/hmg/lib/win/mingw/libhmg.a(h_windows.o):h_windows.c:(.data+0x1458): undefined reference to `_HB_FUN_CALLDLL32'
hbmk2: Hint: Correct possibly mistyped function name(s):
WIN_P2N() -> win_Prn()
hbmk2: Error: Referenced, missing, but unrecognized Harbour function(s):
WIN_P2N(), CALLDLL32()
hbmk2: Hint: Add input file 'xhb.hbc' instead of specifying raw library using
'-lxhb' or 'libs=xhb'.
São funções não existentes no Harbour 3.4. Nesse caso criei tapa-buraco.
FUNCTION Win_P2N(...); RETURN Win_Prn( ... )
FUNCTION CallDll32( ... ); RETURN CallDll( ... )
d:\CVSFiles\hmgall\hmg\SAMPLES\Basics\MULTIWIN>mgcompile *.prg -odemo
3369472 -> 1183232 35.12% win32/pe demo.exe
Pronto.
Não foi nada demais, apenas soluções estilo Clipper, que usamos há mais de 20 anos.
Os fontes da HMG e HMG extended são compatÃveis, até determinado ponto.
Vamos tentar com HMG Extended
mgcreate
mgcompile *.prg -odemo
hbmk2: Hint: Add input file 'xhb.hbc' for missing Harbour function(s):
HB_ISNIL(), CallDll()
hbmk2: Hint: Add input file 'hbmisc.hbc' for missing Harbour function(s):
CallDll()
hbmk2: Hint: Add input file 'hbwin.hbc' for missing Harbour function(s):
win_Prn()
O próprio HBMK2 já avisou o que fazer.
[code]
mgcompile *.prg -odemo hbmisc.hbc hbwin.hbc xhb.hbc
2199040 -> 746496 33.95% win32/pe demo.exe
Pronto.
O que foi necessário?
Apenas saber compilar como Harbour/HBMK2, e resolver mensagens de erro do Harbour/HBMK2.
Deu erro em alguma coisa, olhar lá aonde deu erro.
Deu falta de alguma coisa, procurar aonde está essa coisa.
A gente faz isso há mais de 20 anos, uma vez mais não faz diferença.
Isso é diferente de usar um pacote fechado, com BATs confusos, que a gente dificilmente consegue localizar qual foi o problema.
E que a gente ouve como resposta: resintale tudo, configure tudo, use os BATs que vém com ela.
É a diferença entre:
- sei o que estou fazendo, se deu erro vamos ver como resolver
- o que será que fiz errado, o que será que ela precisa, devo ter bagunçado tudo
Enquanto de uma forma, você fica cada vez mais craque e certo do que faz, da outra parece que você está sempre errado e desaprendendo.
É por isso que muitos acabam nem tentando testar algo novo.
Ficam com a sensação de que não sabem fazer, e vão estragar a configuração que criaram em sua máquina.
Ao passo que se entenderem o que estão fazendo, vão longe.
Conseguem configurar e desconfigurar tudo à vontade.
Como eu sempre digo:
É ficar craque no básico. O básico resolve tudo, e o básico não se altera nunca.
Nota: No caso desse exemplo, ele não é compatÃvel com OOHG ou HWGUI, por isso nem tentei compilar com elas.