Página 1 de 2
Teste de stream no windows
Enviado: 28 Jun 2020 00:49
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.
Agradeço a ajuda!
Teste de stream no windows
Enviado: 28 Jun 2020 00:52
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...
Teste de stream no windows
Enviado: 28 Jun 2020 04:26
por JoséQuintas
Código: Selecionar todos
#pragma __binarystreaminclude "image\xx.jpg" | RETURN %s
Teste de stream no windows
Enviado: 28 Jun 2020 08:16
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.
Teste de stream no windows
Enviado: 28 Jun 2020 12:22
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.
Teste de stream no windows
Enviado: 28 Jun 2020 12:45
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 ?
Teste de stream no windows
Enviado: 28 Jun 2020 15:07
por JoséQuintas
3.4
Colocou do jeito que mostrei, com BINARY ?
Teste de stream no windows
Enviado: 28 Jun 2020 16:14
por Vlademiro
Sim. Não funcionou.
Teste de stream no windows
Enviado: 28 Jun 2020 16:14
por Vlademiro
Vou pegar uma versão mais nova do harbour.
Teste de stream no windows
Enviado: 28 Jun 2020 19:46
por JoséQuintas
Mais uma coisa: Uso MINGW no Windows
Não sei se pode estar relacionado ao compilador C.
Teste de stream no windows
Enviado: 29 Jun 2020 04:15
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!
Teste de stream no windows
Enviado: 29 Jun 2020 14:06
por Poka
Vlademiro, boa tarde
Qual a real finalidade dessa função?
Poka
Teste de stream no windows
Enviado: 29 Jun 2020 15:14
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.
Teste de stream no windows
Enviado: 29 Jun 2020 16:41
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
Teste de stream no windows
Enviado: 29 Jun 2020 16:48
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