Teste de stream no windows

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Teste de stream no windows

Mensagem por Vlademiro »

Pessoal, uma rotina que criei está funcionando perfeitamente no Linux mas no Windows dá um problema. O Harbour que tenho aqui é meio antigo, foi o que veio com a HMG, portanto é de 2016 e o do Linux é de 2019. Daria para alguém que tivesse um Harbour (windows) mais novo testar essa rotina ?

Basicamente o que ela faz é ler uma imagem no próprio executável e depois salva.
Eu vou postar um teste com o trecho isolado:

Código: Selecionar todos


FUNCTION Main()


    MemoWrit( "novo.jpg" , Imagem() )


    RETURN NIL

FUNCTION Imagem()

  LOCAL cReturn := ""
 
#ifdef __PLATFORM_WINDOWS__ 
#pragma __streaminclude "imagem\01.jpg" | cReturn := %s
#else
#pragma __streaminclude "imagem/01.jpg" | cReturn := %s
#endif
  
RETURN cReturn


Zip com a imagem 01.jpg incluída.
stream.zip
(47.82 KiB) Baixado 207 vezes
Agradeço a ajuda!
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Teste de stream no windows

Mensagem por Vlademiro »

Complementando...

A imagem gerada (novo.jpg) deverá ser vista sem falhas. Aqui no Windows só salva a dimensão dela, mas a imagem em si não. Tomara que seja a versão do Harbour...
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Teste de stream no windows

Mensagem por JoséQuintas »

Código: Selecionar todos

 #pragma __binarystreaminclude "image\xx.jpg"   | RETURN %s
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/
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Teste de stream no windows

Mensagem por Vlademiro »

Não deu certo.
Pode ser a função que faz a escrita (MemoWrit, que foi criada para manipular textos) ou o harbour que eu tenho aqui que, como falei, é de 2016 (no Linux funciona mesmo com Memowrit).

Por isso eu pedi para testarem.
Se alguém puder testar essa rotina eu agradeço.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Teste de stream no windows

Mensagem por JoséQuintas »

Testou com retorno direto, sem variável?
Uso do jeito que mostrei normalmente, pra imagens de qualquer tipo e/ou DLL e/ou qualquer coisa.
Na gravação, é lógico, uso hb_MemoWrit() pra que não seja acrescentado control-z no final.
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/
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Teste de stream no windows

Mensagem por Vlademiro »

Testei com memowrit e hb_memowrit. Não funcionou. No Linux funciona com as duas funções.

Quintas, qual a versão do harbour q vc usa ?
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Teste de stream no windows

Mensagem por JoséQuintas »

3.4

Colocou do jeito que mostrei, com BINARY ?
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/
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Teste de stream no windows

Mensagem por Vlademiro »

Sim. Não funcionou.
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Teste de stream no windows

Mensagem por Vlademiro »

Vou pegar uma versão mais nova do harbour.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Teste de stream no windows

Mensagem por JoséQuintas »

Mais uma coisa: Uso MINGW no Windows
Não sei se pode estar relacionado ao compilador C.
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/
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Teste de stream no windows

Mensagem por Vlademiro »

Quintas,

Funcionou conforme vc informou.

O meu teste ficou assim :

Código: Selecionar todos

FUNCTION Main()

    HB_MemoWrit( "novo.jpg" , Imagem() )

    RETURN NIL

FUNCTION Imagem()

  LOCAL xReturn := ""
 
#pragma __binarystreaminclude "imagem\01.jpg"   | xReturn := %s 
  
RETURN xReturn
A variável xReturn nem precisava, é porque eu gosto de verificar algum possível erro depois da operação. Na rotina posso ver o tamanho dela, por exemplo.

Mas o que aconteceu, afinal ?

Eu que estava errando a diretiva.
Não é __PLATFORM_WINDOWS__
Mas sim __PLATFORM__WINDOWS

Como estava informada errada, o programa sempre pegava a definição para Linux, que não estava alterada para binary.

Na verdade, não precisa da diretiva. O Harbour converte automaticamente.
Fiz o teste com :

Código: Selecionar todos

#pragma __binarystreaminclude "imagem/01.jpg"   | cReturn := %s 
Repare que só mudou a barra (que é no padrão *NIX) e também funcionou no Windows.

Agora, interessante é que no Linux não precisei usar __binarystreaminclude nem Hb_Memowrit. Vou alterar o código aqui para que funcione nos dois.

Obrigado!
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Teste de stream no windows

Mensagem por Poka »

Vlademiro, boa tarde

Qual a real finalidade dessa função?

Poka
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Teste de stream no windows

Mensagem por Vlademiro »

Poka, essa função serve para várias finalidades. Ela serve para "embutir" no seu aplicativo arquivos de qualquer espécie.

Pelo que eu entendi o Quintas usa para mandar a DLL "dentro" do seu aplicativo e, lá no cliente, verifica se a DLL existe com FILE, se não existir "escreve" ela com hb_Memowrit. Nunca tinha pensado nesse uso, mas é bem legal, porque se alguém apagar a DLL o programa cria de novo porque o binário está dentro dele.

Eu já embuti arquivos xml na minha aplicação, páginas web, imagens e outros.

Agora, ela não é bem uma função. Não sei bem o nome que dá, porque ela funciona em tempo de compilação (como um #define).
Vc compila seu aplicativo e "embute" o que quiser dentro da sua aplicação.

É como se fosse um "resource", só que é do próprio Harbour, funciona em qualquer plataforma e aceita qualquer arquivo.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Teste de stream no windows

Mensagem por JoséQuintas »

Vlademiro escreveu:Pelo que eu entendi o Quintas usa para mandar a DLL "dentro" do seu aplicativo e, lá no cliente, verifica se a DLL existe com FILE, se não existir "escreve" ela com hb_Memowrit.
Exato.
Uso de ícones 11MB.
Se uso 11MB pra tranqueira, porque não mais 3MB em coisas úteis?

29/06/2020 16:39 3.181.437 ze_resource.o
29/06/2020 16:39 11.000.293 ze_resource.c
29/06/2020 16:39 11.119.618 jpa.reso

29/06/2020 16:39 6.545.328 jpa.exe
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Teste de stream no windows

Mensagem por JoséQuintas »

E se der pra registrar automático a DLL do MySQL.... vai junto também.

Por enquanto:

capicom.dll
msxml5.dll
msxml5r.dll
rmchart.dll
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/
Responder