Serialização de Variants

Estou trabalhando em um projeto que faz uso extensivo de variáveis do tipo Variant que precisam ser armazenadas em objetos TStream. Os valores podem ser de qualquer tipo: inteiros, strings, datas e até arrays. Os streams são então levados de um lugar para outro em arquivos ou diretamente pela rede para serem lidos por outro processo.

É claro que eu não fui o primeiro a ter essa necessidade, então antes de começar a quebrar a cabeça fui buscar no Google as soluções que já tinham sido criadas. Primeiro encontrei um comentário de Deborah Pate (TeamB) no newsgroup Borland “oleautomation”. Foi um bom começo, mas ainda faltava muito.

Mais tarde encontrei os posts de Nikolay Pavlov - nem acredito que encontrei um parente de Pavlov e ainda um que programa em Delphi! Nikolay estava bem mais próximo do que eu precisava, inclusive com o tratamento recursivo de arrays.

Como o código é livre, copiei, fiz diversas alterações e melhoramentos e estou publicando aqui a minha versão para quem se interessar.

Comments

4 Responses to “Serialização de Variants”

  1. Alex on October 26th, 2008 7:09 pm

    Ola Daniel.

    Em que tipo de aplicação poderiamos utilizar essa técnica?

    Para enviar dados de uma “SELECT” num banco, por exemplo?

  2. Daniel Maltarolli on October 26th, 2008 7:36 pm

    Alex, se você quiser guardar em um campo Blob no seu banco de dados é perfeitamente viável. Acho que é mais apropriado a aplicações de baixo nível, como transferências de dados por TCP/IP ou porta serial em que um TStream seja utilizado como fonte de dados.

    As rotinas que eu fiz podem lidar com praticamente qualquer tipo de Variant. Até mesmo o conteúdo das propriedades Data e Delta de um TClientDataSet.

  3. Nova versão de VarStreams : Malta on Delphi on November 24th, 2008 5:51 pm

    [...] algumas alterações na unit VarStreams (antiga StreamVars), que faz serialização genérica de Variants em objetos TStream e [...]

  4. Ederson Selvati on October 15th, 2009 9:14 pm

    Ola Daniel

    Por exemplo, gero um arquivo .PDF no servidor atraves de um metodo chamado pelo cliente, gostaria que este metodo tivesse um retorno VARIANT onde eu carregaria o .PDF em um TFileStream, e converteria o TFileStream em Variant e no cliente faria o processo inverso, é possivel usando a VarStreams?

Deixe uma Resposta




XHTML: Você pode usar essas tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">