Página 2 de 4
Re: Compilar com Harbour
Enviado: 09 Set 2009 16:02
por sygecom
Olá Fladimir,
Para quem não acompa Harbour-Devel, vou resumir aqui, os desenvolvedores do Harbour informaram que essas funções do xharbour foram mal implementas, e que pode usar a função direto com o aplicativo que usa ela, então é só colocar a função abaixo em algum .PRG seu que já resolve:
Código: Selecionar todos
#include "fileio.ch"
#include "common.ch"
*----------------------------------------------------------------------------
FUNCTION FileValid( cFileName, nMaxName, nMaxExt, lWithoutExt, lSpaceInName )
*----------------------------------------------------------------------------
/*
This function return by default, the MS-DOS valid file name (8x3) or an other
format defined by user in accordance with <nMaxName> and <nMaxExt> values.
nMaxName, nMaxExt, lWithoutExt and lSpaceInName are xHarbour extensions.
*/
Local lRet := .T.
Local cName := ""
Local cExt := ""
Local i := 0
Local cInvalid := ""
Local nDecimalPoint := 0
Local nFileLen := 0
default cFileName to ""
default nMaxName to 8 // max file name len.
default nMaxExt to 3 // max extension name len.
default lWithoutExt to .T. // allow file name without extension.
default lSpaceInName to .F. // allow space char in file name.
if !IsCharacter(cFileName) .or. Empty(cFileName)
Return .F.
endif
if !IsNumber(nMaxName)
nMaxName := 8
endif
if !IsNumber(nMaxExt)
nMaxExt := 3
endif
if !IsLogical(lWithoutExt)
lWithoutExt := .T.
endif
if !IsLogical(lSpaceInName)
lSpaceInName := .F.
endif
if nMaxName <= 0
Return .F.
endif
if nMaxExt <= 0
nMaxExt := 0
lWithoutExt := .T.
endif
for i := 0 to 255
if (i>=0 .and. i<=32) .or.;
i=34 .or.;
(i>=42 .and. i<=44) .or.;
(i>=46 .and. i<=47) .or.;
(i>=58 .and. i<=63) .or.;
(i>=91 .and. i<=93) .or.;
i=124 .or. i=127
cInvalid += chr(i)
endif
next
if lSpaceInName
cInvalid := StrTran(cInvalid," ","")
endif
cFileName := Rtrim(cFileName)
nDecimalPoint := At(".",cFileName)
nFileLen := Len( cFileName )
if nFileLen=0 .or. nFileLen > (nMaxName+nMaxExt+1)
lRet := .F.
elseif nDecimalPoint > (nMaxName+1)
lRet := .F.
elseif nDecimalPoint > 0 .and. nMaxExt = 0
lRet := .F.
elseif nDecimalPoint > 0 .and. nDecimalPoint <= (nMaxName+1)
cName := SubStr(cFileName,1, nDecimalPoint-1 )
cExt := SubStr(cFileName,nDecimalPoint+1 )
if empty(cName) .or. ( !lWithoutExt .and. empty(cExt) )
lRet := .F.
endif
elseif nDecimalPoint=0 .and. !lWithoutExt
lRet := .F.
elseif nDecimalPoint=0 .and. nFileLen > nMaxName
lRet := .F.
elseif nDecimalPoint=0 .and. nFileLen <= nMaxName
cName := cFileName
endif
if lRet
if !empty(cName)
if Len(cName) > nMaxName
lRet := .F.
endif
else
lRet := .F.
endif
if lRet .and. ( empty(cExt) .and. !lWithoutExt )
lRet := .F.
endif
if lRet .and. !empty(cExt)
if Len(cExt) > nMaxExt
lRet := .F.
endif
endif
endif
if lRet
for i := 1 to Len(cName)
if SubStr(cName,i,1) $ cInvalid
lRet := .F.
exit
endif
next
if lRet .and. !empty(cExt)
for i := 1 to Len(cExt)
if SubStr(cExt,i,1) $ cInvalid
lRet := .F.
exit
endif
next
endif
endif
Return (lRet)
Re: Compilar com Harbour
Enviado: 09 Set 2009 21:09
por fladimir
Leonardo obrigado e cmo diria minha finada vovozinha (gaúcha de São Luiz Gonzaga) "Mas q bom Barbaridade"
Entendi, e qto ao DiskTotal, DiskReady, DiskFree e CurDirX lá tb explica, posta o link aí pra eu dar uma olhada...
Obrigado!!!
:)Pos
Re: Compilar com Harbour
Enviado: 09 Set 2009 21:22
por sygecom
Coloquei em Anexo o arquivo que contem essas Funçoes
Abaixo o link sobre o FileValid, no Harbour-Devel:
http://www.nabble.com/There-is-a-functi ... 67075.html
Re: Compilar com Harbour
Enviado: 09 Set 2009 21:38
por fladimir
Grato.. vlw
:)Pos
Re: Compilar com Harbour
Enviado: 10 Set 2009 17:23
por Hasse
Boa tarde amigos.
Estou compilando aplicativos com Harbour, BCC55 e MSVC.

)

)

)
Despois de compilado o Harbour com BCC, retirei a pasta Harbour de dentro da pasta trunk, coloquei-a no diretório raiz, e alterei o seu nome para Harbour_bcc.
Em seguida fiz a mesma coisa com o Harbour com MSVC e alterei o seu nome para Harbour_VC.
Ficou assim:
C:\Harbour_bcc
C:\Harbour_vc
Em seguida creiei *.bat's dentro das pastas de desenvolvimento de aplicativos, com as variáveis de ambiente e path's para cada caso. Basta rodar o
PathBcc.bat ou
PathVC.bat, compilar com o HBMK2, e tudo sai funfando beleza.
Obrigado a todos que me ajudaram nesta migração. :{ :-Y
Agora vem o trabalho para os necessários aprendizados e ajustes, efetuar os devidos testes com lista de prg's (*.hbm) e lib's. Finalmente os testes.
Re: Compilar com Harbour
Enviado: 11 Set 2009 01:45
por fladimir
Olá a todos,
Pessoal devido ter mudado de xHarbour par Harbour estou fazendo uns ajustes e com ajuda de colegas consegui resolver a questão das Funções DiskTotal, DiskFree, etc da CT q não estavam no Harbour, compilando junto com meus fontes o DiskUtil.prg, conforme o Leonardo explanou.
Ok partindo deste raciocínio para a Função CurDirX(), procurei ela e econtrei no philes.c no source do xHarbour, ai eu peguei a parte da função e salvei com o nome de CurdirX.C e compilei junto, mas ta dando erro, alguém sabe pq, eu não manjo nada de C e talvez seja alguma sintaxe no arquivo, abaixo o código de como ficou o CurDirX.C e a mensagem de erro.
Código: Selecionar todos
/*
* $Id: philes.c,v 1.40 2009/08/19 22:40:47 likewolf Exp $
*/
/*
Referidos créditos q apaguei para poupar espaço.
*/
#include <ctype.h>
#include "hbapi.h"
#include "hbapifs.h"
#include "hbapierr.h"
#include "hbapiitm.h"
#define HB_TOUPPER( c ) ( ( c ) >= 'a' && ( c ) <= 'z' ? ( c ) - ( 'a' - 'A' ) : ( c ) )
HB_FUNC( CURDIRX )
{
USHORT uiErrorOld = hb_fsError();
BYTE * pbyBuffer = ( BYTE * ) hb_xgrab( HB_PATH_MAX );
PHB_ITEM pDrv = hb_param( 1, HB_IT_STRING );
BYTE cCurDrv = hb_fsCurDrv();
BYTE cDrv;
if( pDrv && hb_parclen( 1 ) > 0 )
{
cDrv = (BYTE) ( HB_TOUPPER( pDrv->item.asString.value[0] ) - 'A');
if( cDrv != cCurDrv )
{
hb_fsChDrv( cDrv );
}
}
else
{
cDrv = cCurDrv;
}
hb_fsCurDirBuffEx( cDrv, pbyBuffer, HB_PATH_MAX );
hb_retcAdopt( ( char * ) pbyBuffer );
hb_fsChDrv( cCurDrv );
hb_fsSetError( uiErrorOld );
}
Erro apresentando na compilação:
...
vendedor.c
curdirx.c
curdirx.c(67) : error C2223: left of '->item' must point to struct/union
curdirx.c(67) : error C2223: left of '->item' must point to struct/union
curdirx.c(67) : error C2223: left of '->item' must point to struct/union
curdirx.c(67) : error C2223: left of '->item' must point to struct/union
curdirx.c(67) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Generating Code...
hbmk2: Erro: Executando compilador C. 2
...
Grato e Sucesso!!!
:)Pos
Re: Compilar com Harbour
Enviado: 12 Set 2009 22:29
por Hasse
Boa noite colegas.
Acabei de compilar o meu primeiro aplicatico comercial com o Harbour-Msvc.
Neste aplicativo uso a
função MilliSec() e a
Classe Win32prn(). Ao compilar informa a falta desta função e desta classe.
Incluí o
Win32prn.prg e o
Cttime.prg na lista dos prg's do script
"Fio.hbm", mas acredito que esta forma não é a adequada, pois ficaria eternamente dependente dos prg's de lib's.
Eu tentei incluir no script:
Código: Selecionar todos
-lxhb <<== nome lib que supostamente deveria conter o Win32prn() e Millisec().
-LC:\Harbour_vc\lib\win\msvc <<== Path desta lib.
Mas não adiantou.
Como se faz para dar a volta neste problema ?
Re: Compilar com Harbour
Enviado: 13 Set 2009 14:57
por Itamar M. Lins Jr.
Neste aplicativo uso a função MilliSec() e a Classe Win32prn(). Ao compilar informa a falta desta função e desta classe.
Acrecente a lib hbwin.lib
Código: Selecionar todos
2009-02-04 00:29 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbwin/win_reg.prg
* contrib/hbwin/win_osc.c
* contrib/hbwin/win_os.prg
* contrib/hbwin/win_tprn.prg
* contrib/hbwin/win_tprt.prg
* contrib/hbwin/win_dll.c
* contrib/hbwin/win_prn1.c
* contrib/hbwin/win_regc.c
* contrib/hbwin/tests/testreg.prg
* contrib/hbwin/tests/testole.prg
* Renaming hbwin lib functions to a common and bitwidth-neutral
namespace, which is WIN_*():
- W32_REGPATHSPLIT() -> WIN_REGPATHSPLIT()
- W32_REGREAD() -> WIN_REGREAD()
- W32_REGWRITE() -> WIN_REGWRITE()
- WIN32_REGCREATEKEYEX() -> WIN_REGCREATEKEYEX()
- WIN32_REGOPENKEYEX() -> WIN_REGOPENKEYEX()
- WIN32_REGQUERYVALUEEX() -> WIN_REGQUERYVALUEEX()
- WIN32_REGSETVALUEEX() -> WIN_REGSETVALUEEX()
- WIN32_REGCLOSEKEY() -> WIN_REGCLOSEKEY()
* contrib/hbwin/win_tprn.prg
* contrib/hbwin/win_prn1.c
* contrib/hbwin/tests/testprn.prg
* Renaming hbwin lib functions/classes to a common and bitwidth-neutral
namespace, which is WIN_*():
- WIN32PRN class -> WIN_PRN class.
- WIN32BMP class -> WIN_BMP class.
- WIN32_ARC() -> WIN_ARC()
- WIN32_BITMAPSOK() -> WIN_BITMAPSOK()
- WIN32_CREATEDC() -> WIN_CREATEDC()
- WIN32_CREATEFONT() -> WIN_CREATEFONT()
- WIN32_DELETEDC() -> WIN_DELETEDC()
- WIN32_DRAWBITMAP() -> WIN_DRAWBITMAP()
- WIN32_ELLIPSE() -> WIN_ELLIPSE()
- WIN32_ENDDOC() -> WIN_ENDDOC()
- WIN32_ENDPAGE() -> WIN_ENDPAGE()
- WIN32_ENUMFONTS() -> WIN_ENUMFONTS()
- WIN32_FILLRECT() -> WIN_FILLRECT()
- WIN32_GETCHARSIZE() -> WIN_GETCHARSIZE()
- WIN32_GETDEVICECAPS() -> WIN_GETDEVICECAPS()
- WIN32_GETEXEFILENAME() -> WIN_GETEXEFILENAME()
- WIN32_GETPRINTERFONTNAME() -> WIN_GETPRINTERFONTNAME()
- WIN32_GETTEXTSIZE() -> WIN_GETTEXTSIZE()
- WIN32_LINETO() -> WIN_LINETO()
- WIN32_LOADBITMAPFILE() -> WIN_LOADBITMAPFILE()
- WIN32_MULDIV() -> WIN_MULDIV()
- WIN32_OS_ISWIN9X() -> WIN_OS_ISWIN9X()
- WIN32_RECTANGLE() -> WIN_RECTANGLE()
- WIN32_SETBKMODE() -> WIN_SETBKMODE()
- WIN32_SETCOLOR() -> WIN_SETCOLOR()
- WIN32_SETDOCUMENTPROPERTIES() -> WIN_SETDOCUMENTPROPERTIES()
- WIN32_SETMAPMODE() -> WIN_SETMAPMODE()
- WIN32_SETPEN() -> WIN_SETPEN()
- WIN32_STARTDOC() -> WIN_STARTDOC()
- WIN32_STARTPAGE() -> WIN_STARTPAGE()
- WIN32_TEXTOUT() -> WIN_TEXTOUT()
; INCOMPATIBLE. Please update your source code.
Saudações,
Itamar M. Lins Jr.
Re: Compilar com Harbour
Enviado: 14 Set 2009 18:06
por Hasse
Boa tarde Itamar.
Obrigado pelo retorno.
A Classe Win32prn() realmente está nesta HbWin.lib, mas a função Millisec() não. Em qual lib estaria esta função ?
Re: Compilar com Harbour
Enviado: 14 Set 2009 18:29
por Maligno
Arquivo XHB.LIB, creio eu.
Re: Compilar com Harbour
Enviado: 15 Set 2009 23:14
por sygecom
Olá Hasse,
Creio que esteja na HBCT.LIB
Re: Compilar com Harbour
Enviado: 16 Set 2009 09:47
por Hasse
Bom dia.
É Maligno, eu também achei que esta função MilliSec() estivesse na XHB.lib, conforme a documentação do xHarbour, mas não está.
O Leonardo é que acertou na mosca. É na (
HBct.lib) que ela está.
Eu já estava pensando em testar, uma por uma, todas as 66 lib's que estão no Harbour.
Pelo que estou percebendo, o Harbour tem lá suas diferenças em relação ao xHarbour, no tocante às libs.
Onde poderíamos obter uma lista das funções presentes em cada uma das lib's do Harbour
Valeu. Obrigado.
Re: Compilar com Harbour
Enviado: 16 Set 2009 10:49
por Maligno
Quanto à lista não sei responder. Mas no desespero à procura de alguma função, você poderia simplesmente tirar uma listagem dos módulos. O TLINK traz esse recurso. É só executá-lo em linha de comando sem argumentos que a sintaxe aparece. Depois é só ler o TXT que ele devolve. A listagem sai por módulos e o conteúdo de cada módulo. Interessante lembrar, pra quem não sabe: sempre que uma função é incluída no executável, é o módulo (inteiro) que é ligado ao programa. Mesmo que ele contenha dezenas de funções.
Re: Compilar com Harbour
Enviado: 16 Set 2009 22:18
por Hasse
Boa noite Maligno.
Eu imagino que você queria sugerir o TLIB.exe em vez de TLINK.exe.
Bem, eu testei o LIB.exe, o LIBRA.exe e o TLIB.exe, mas nenhum deles abre estas lib's do xHarbour/Harbour. A não ser que eu esteja usando estes aplicativos de forma incorreta. Sempre reporta erro.
No tempo do Clipper eu usava muito o LIB.exe para criar as minhas lib's, como também para listar as funções nelas contidas.
Será que estes aplicativos são somente para uso com lib's compiladas com o Clipper ? É o que está me parecendo.
Re: Compilar com Harbour
Enviado: 17 Set 2009 12:47
por Hasse
Boa tarde colegas.
Estou com mais um problema:
A compilação com o Harbour x msvc está funcionando muito bem no meu DeskTop. Instalei no meu NoteBook e não tem jeito de funcionar. Já estou batalhando uns 5 dias e nada.
É o seguinte:
1-Não sei se é o culpado, mas a sintaxe do path não funciona da maneira tradicional extendida. Só funciona no formato DOS, o seja, como exemplo:
C:\Arquiv~1\Micros~4\VC\lib, etc...
2-A pasta Microsoft Visual Studio 9.0 não é reconhecida por causa do ponto entre 9 e 0. Precisei retirar o ponto de deixar como 90.
3-O Windos XP das 2 máquinas é o mesmo.
4-A compilação reporta erro (a lista é bastante grande e só postei pequena parte dela):
Código: Selecionar todos
hbmk2: Processando arquivo de configura‡Æo: C:\Harbour_vc\bin\hbmk.cfg
hbmk2: Linkando... Fio400h.exe
LIBCMT.lib(a_str.obj) : error LNK2001: unresolved external symbol __imp__MultiByteToWideChar@24
LIBCMT.lib(a_cmp.obj) : error LNK2001: unresolved external symbol __imp__MultiByteToWideChar@24
LIBCMT.lib(convrtcp.obj) : error LNK2001: unresolved external symbol __imp__MultiByteToWideChar@24
LIBCMT.lib(read.obj) : error LNK2001: unresolved external symbol __imp__MultiByteToWideChar@24
HBWin.lib(olecore.obj) : error LNK2019: unresolved external symbol __imp__MultiByteToWideChar@24 referenced in function "wchar_t * __cdecl AnsiToWide(char const *)" (?AnsiToWide@@YAPA_WPBD@Z)
hbcommon.lib(hbwince.obj) : error LNK2001: unresolved external symbol __imp__MultiByteToWideChar@24
que suponho seja a falta de várias lib's.
Acredito que em virtude destas alterações feitas nas pastas e path's, algum path não esteja apontando para a pasta adequada.
Parece-me que a LIBCMT.lib(a_str) esteja buscando a variável
__imp__MultiByteToWideChar@24 e não encontra. Esta linha é só como exemplo.
Então fica a pergunta: Provavelmente o problema da sintaxe do Path depende de alguma configuração do Windows. Qual seria ?