Definir data de compilação com DEFINE
Moderador: Moderadores
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Definir data de compilação com DEFINE
Bom dia...
Tendo a definição:
#DEFINE DATACOMP DTOC(DATE())
Como eu poderia fazer para DATACOMP armazenar o literal e não a função?
Eu gostaria de armazenar a data da última compilação automaticamente.
Onde eu buscasse o conteúdo de DATACOMP me retornasse '19/09/2016' e não o resultado de DTOC(DATE()).
Sei que dá para buscar isso do executável mas gostaria de saber se é possível fazer isso com o define.
Obrigado
Rubens
Tendo a definição:
#DEFINE DATACOMP DTOC(DATE())
Como eu poderia fazer para DATACOMP armazenar o literal e não a função?
Eu gostaria de armazenar a data da última compilação automaticamente.
Onde eu buscasse o conteúdo de DATACOMP me retornasse '19/09/2016' e não o resultado de DTOC(DATE()).
Sei que dá para buscar isso do executável mas gostaria de saber se é possível fazer isso com o define.
Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você
"
Definir data de compilação com DEFINE
Pode fazer assim:
Bat para compilar:
No .rc (exemplo)
DATACOMP RCDATA timestamp.txt
No prg
Função Hb_LoadResourceRawFile()
Bat para compilar:
Código: Selecionar todos
echo %date% %time% > timestamp.txt
hbmk2 estagio.hbp -rebuild
DATACOMP RCDATA timestamp.txt
No prg
Código: Selecionar todos
#define RT_RCDATA (10)
cDataComp := Hb_LoadResourceRawFile ( "DataComp", RT_RCDATA )
Código: Selecionar todos
#pragma BEGINDUMP
#include <Windows.h>
#include <hbApi.h>
// HMG_LoadResourceRawFile ( cFileName, cTypeResource | nTypeResourceID )
HB_FUNC ( HB_LOADRESOURCERAWFILE )
{
HRSRC hResourceData;
HGLOBAL hGlobalResource;
LPVOID lpGlobalResource = NULL;
DWORD nFileSize;
TCHAR *FileName = (TCHAR*) hb_parc(1);
TCHAR *TypeResource = HB_ISCHAR (2) ? (TCHAR*) hb_parc(2) : MAKEINTRESOURCE ( hb_parni(2) );
hResourceData = FindResource ( NULL, FileName, TypeResource );
if ( hResourceData != NULL )
{
hGlobalResource = LoadResource ( NULL, hResourceData );
if ( hGlobalResource != NULL )
{
lpGlobalResource = LockResource ( hGlobalResource );
if ( lpGlobalResource != NULL )
{
nFileSize = SizeofResource ( NULL, hResourceData );
hb_retclen ( (const CHAR *) lpGlobalResource, (HB_SIZE) nFileSize );
}
FreeResource ( hGlobalResource );
}
}
if ( lpGlobalResource == NULL )
hb_retclen ( (const CHAR *) NULL, (HB_SIZE) 0 );
}
#pragma ENDDUMP
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Definir data de compilação com DEFINE
https://pctoledo.org/forum/viewto ... 51#p109155Se o problema for só obter um identificador para a versão do programa, o Harbour já faz isso automaticamente.
Pode compilar com a versão
-tshead=build.ch
Com essa versão ele gera o arquivo build.ch
O arquivo build.ch :
/* Automatically generated by hbmk2. Do not edit. */
#define _HBMK_BUILD_DATE_ "20160818"
#define _HBMK_BUILD_TIME_ "185538"
#define _HBMK_BUILD_TIMESTAMP_ "20160818185538201"
Daí vc pode fazer no seu código :
#include "build.ch"
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Definir data de compilação com DEFINE
Repetir o outro post, porque aqui fica no lugar correto.
Demorei pra encontrar o post anterior porque está em outro assunto.
Resolvi assim, porque o do Harbour não me atendeu.
Este fonte compilado:
chamado no bat de compilação:
que gera este arquivo:
no meu fonte principal:
e no jpa.rc:
Demorei pra encontrar o post anterior porque está em outro assunto.
Resolvi assim, porque o do Harbour não me atendeu.
Este fonte compilado:
Código: Selecionar todos
PROCEDURE Main
LOCAL cDateTime, cTxt, nBuildNum, cBuildFile
cBuildFile := "d:\cdrom\fontes\build\build.ch"
cDateTime := Dtos( Date() ) + Substr( Time(), 1, 2 ) + Substr( Time(), 4, 2 )
nBuildNum := Val( Substr( MemoRead( cBuildFile ), 4, 10 ) ) + 1
cTxt := "// " + Str( nBuildNum, 10 ) + hb_Eol()
cTxt += "#define JPA_VERSAO " + ["] + Transform( cDateTime, "@R 9999.99.99.9999" ) + ["] + hb_Eol()
cTxt += "#define JPA_VERSAO_RC " + Transform( cDateTime, "@R 9999,99,99,9999" ) + hb_Eol()
hb_MemoWrit( cBuildFile, cTxt )
RETURN
Código: Selecionar todos
del jpa.exe
d:\cdrom\fontes\build\build
hbmk2 jpa.hbp %1 %2 %3 %4 %5
if not errorlevel 1 assina jpa.exe
Código: Selecionar todos
// 705
#define JPA_VERSAO "2016.09.19.1837"
#define JPA_VERSAO_RC 2016,09,19,1837
Código: Selecionar todos
#include "build.ch"
AppVersaoExe( JPA_VERSAO )
Código: Selecionar todos
#include "build.ch"
1 VERSIONINFO
FILEVERSION JPA_VERSAO_RC
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Definir data de compilação com DEFINE
Quintas,
Faltou publicar a function AppVersaoExe( JPA_VERSAO )
Faltou publicar a function AppVersaoExe( JPA_VERSAO )
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Definir data de compilação com DEFINE
Faltou não, eu só não deveria ter postado parte do meu fonte.... rs
Só imaginar o #define como se fosse uma variável.
Só imaginar o #define como se fosse uma variável.
Código: Selecionar todos
// #define JPA_VERSAO "2016.09.19.1837"
#include "build.ch"
@ 1, 0 SAY "Versao " + JPA_VERSAO
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Definir data de compilação com DEFINE
Amigos, uma outra opção seria pegar a data do arquivo EXE:
Abraços,
Código: Selecionar todos
cExeNome:=ExeName()
DATACOMP:=FileDate(cExeNome)Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Definir data de compilação com DEFINE
Não dá muito certo, porque se baixar da internet, a data acaba sendo a data de download.
E aí começa a precisar de outras precauções.
E aí começa a precisar de outras precauções.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Definir data de compilação com DEFINE
Quintas,
Sei que existe inúmeras maneiras de pescar essa informação da data e quanto ao seu .rc
#include "build.ch"
1 VERSIONINFO
FILEVERSION JPA_VERSAO_RC
Como é que você pega o valor? ou bata informar o include que eu tenho acesso ao valor de JPA_VERSAO_RC ?
Sei que existe inúmeras maneiras de pescar essa informação da data e quanto ao seu .rc
#include "build.ch"
1 VERSIONINFO
FILEVERSION JPA_VERSAO_RC
Como é que você pega o valor? ou bata informar o include que eu tenho acesso ao valor de JPA_VERSAO_RC ?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Definir data de compilação com DEFINE
Quintas
Descobri uma forma de criar o build.ch na própria bat de compilação.
echo #define build_date "%date%" > build.ch
echo #define build_time "%time%" >> build.ch
Ou
echo #define buildapp "%date% %time%" > build.ch
Descobri uma forma de criar o build.ch na própria bat de compilação.
echo #define build_date "%date%" > build.ch
echo #define build_time "%time%" >> build.ch
Ou
echo #define buildapp "%date% %time%" > build.ch
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Definir data de compilação com DEFINE
Bom dia! uso de uma maneira mais simples a criação de versão em meu sistema, uso da seguinte maneira:
1- Crio um executável ( Cria_vers )
2- Coloco o versao.prg para compilar junto com o sistema
3- Coloco em BAT para executar o cria_Ver para gerar um novo versao.prg
Frazato
1- Crio um executável ( Cria_vers )
2- Coloco o versao.prg para compilar junto com o sistema
3- Coloco em BAT para executar o cria_Ver para gerar um novo versao.prg
Frazato
Código: Selecionar todos
/*
Rotina de criaoca de numero de verao
tera que ser utiliza antes do processo compilacao do sistema
Joao Frazato
*/
Estru := { {"Data" , "D" , 08,0 },;
{"Geracao" , "N" , 08,0 } }
If ! file("versao.dbf")
Dbcreate("Versao.dbf",Estru)
Endif
Close All
Sele 1
use Versao
go bott
nnumero := Geracao+1
Append Blank
Repla Data With date()
Repla Geracao With nnumero
If File("Versao.prg")
delete File versao.prg
Endif
cTxtcArq := 'Versao.prg'
cxbase := {}
QuebraLinha := Chr(13)+Chr(10)
Aadd(cxbase,'Function Ver_Jaf_Versao()' )
Aadd(cxbase,'Local nVersao:="'+Dtos(data)+'-'+strZero(nNumero,3)+'"' )
Aadd(cxbase,'Return nVersao' )
Handle := FCreate(cTxtcArq)
If Ferror() # 0
alert("Impossivel gravar o pedido Temporario "+cTxtcArq)
Endif
For x:= 1 to Len(cxbase)
Fwrite(Handle,cxbase[x]+QuebraLinha)
Next
FCLOSE(HANDLE)
Return nil
Código: Selecionar todos
Function Ver_Jaf_Versao()
Local nVersao:="20100929-355"
Return nVersao
Código: Selecionar todos
@ECHO OFF
CRI_VERS.EXE
HBMAKE SISTEMA.BC
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Definir data de compilação com DEFINE
Amigos, compile este demo:
demo.prg
Compile com hbmk2 e com opção -tshead=demo, por exemplo:
hbmk2 demo.prg -tshead=demo
Com a opção -tshead=demo será criado o arquivo demo.ch contendo as macros _HBMK_BUILD_DATE_, _HBMK_BUILD_TIME_, _HBMK_BUILD_TIMESTAMP_ com a data/hora de criação do arquivo.
Observe que no inicio do DEMO.PRG estou chamando o demo.ch
Abraços,
demo.prg
Código: Selecionar todos
#include "demo.ch"
PROCEDURE Main
SET CENTURY ON
SET DATE FORMAT TO "dd/mm/yyyy"
CLS
? StoD(_HBMK_BUILD_DATE_)
? Transf(_HBMK_BUILD_TIME_,"@R 99:99:99")
RETURNhbmk2 demo.prg -tshead=demo
Com a opção -tshead=demo será criado o arquivo demo.ch contendo as macros _HBMK_BUILD_DATE_, _HBMK_BUILD_TIME_, _HBMK_BUILD_TIMESTAMP_ com a data/hora de criação do arquivo.
Observe que no inicio do DEMO.PRG estou chamando o demo.ch
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Definir data de compilação com DEFINE
As opções são muitas é só escolher:
For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a:%%b)
echo #define buildapp "%date%_%mytime%" > build.ch
O resultado em build.ch é:
#define buildapp "20/09/2016_09:01"
For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a:%%b)
echo #define buildapp "%date%_%mytime%" > build.ch
O resultado em build.ch é:
#define buildapp "20/09/2016_09:01"
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Definir data de compilação com DEFINE
Bom dia...
Esse e o tipo de rotina que quem gosta mesmo de achar soluções dá uma olhadinha e pensa: 'Tem jeito de melhorar"... kkk
Obrigado pelas respostas...
Acabei adotando a última que o toledo postou. Ficou jóia...
Só uma ressalva, fiquei empolgado e fui dar uma de programador aqui, e resolvi usar um ch existente... já viram né o que que deu... o hbmk2 gravou em cima kkkkkkkkkkk ainda bem que tinha cópia do ch...
Obrigado
Valeu...
Rubens
Esse e o tipo de rotina que quem gosta mesmo de achar soluções dá uma olhadinha e pensa: 'Tem jeito de melhorar"... kkk
Obrigado pelas respostas...
Acabei adotando a última que o toledo postou. Ficou jóia...
Só uma ressalva, fiquei empolgado e fui dar uma de programador aqui, e resolvi usar um ch existente... já viram né o que que deu... o hbmk2 gravou em cima kkkkkkkkkkk ainda bem que tinha cópia do ch...
Obrigado
Valeu...
Rubens
"Eu e minha casa servimos ao Senhor e você
"
Definir data de compilação com DEFINE
Com harbour 3.4 o comando é -bldhead=build.ch
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
