Pergunta

Na empresa em que trabalho desenvolvemos toda a GUI em C#, mas o kernel da aplicação é desenvolvido principalmente em Delphi 5 (por questões históricas), com muitos componentes feitos em COM+.Relacionado a este tipo muito específico de aplicação, tenho duas perguntas:

  • Pessoal experiente em Delphi e/ou COM, vocês têm alguma solução alternativa para trabalhar com a interface TLB com bugs?Alguns dos bugs são:IDE travando durante a edição de um TLB grande, perda de IDs de métodos, corrupção de TLB, etc.Aqui, não encontramos nenhuma boa solução.Na verdade tentamos atualizar para a nova versão 2007.Mas a nova interface IDE TLB tem os mesmos bugs que encontramos antes.

  • Como você controla as versões dos TLBs?O arquivo TLB está em formato binário e a resolução de conflitos é muito difícil de fazer.Tentamos fazer isso exportando as descrições das interfaces para IDL e enviando para CVS, mas não encontramos nenhuma boa maneira de gerar TLBs de IDL usando Delphi.Além disso, a ferramenta MIDL fornecida pela Microsoft não analisou corretamente os arquivos IDL que exportamos do delphi.

Foi útil?

Solução

Acho que você deveria dar uma boa olhada no Delphi 2009.

O Delphi 2009 possui alterações no suporte COM, incluindo uma substituição baseada em texto para os arquivos binários TLB.

Você pode ler mais em Blog de Chris Bensen.

Outras dicas

No passado distante (antes de começar a trabalhar para CodeGear), desisti da estranha linguagem IDL Delphiizada que o IDE apresentava e escrevi meu próprio IDL e compilei-o usando MS midl.Isso funcionou amplamente;o único problema, IIRC, era garantir que os dispids (atributo id) estivessem corretos nas interfaces de automação (dispinterfaces) para getters e setters de propriedades - havia alguma invariante que o tlibimp esperava, mas o midl não garantia.

Entretanto, agora que o Delphi 2009 usa um subconjunto seguro de sintaxe midl e inclui um compilador para esse midl na caixa e integrado ao IDE, esses problemas devem ser coisa do passado.

Também acabamos de instalar o Delphi 2009 e parece ter melhorado o suporte para Typelibraries.No entanto, tenho trabalhado com COM e bibliotecas de tipos há algum tempo e aqui estão minhas dicas gerais que encontrei ao longo dos anos.Eu concordo que é bastante problemático e vai até o Delphi 2006 (nossa versão antes de usar 2009).

  • Sempre tenha todos os arquivos graváveis ​​antes de abri-los.Isso pode parecer óbvio, mas ao trabalhar com controle de origem, às vezes esquecemos de fazer isso e tentamos remover o sinalizador somente leitura após abrir um arquivo - o Delphi não consegue lidar com isso.Certifique-se de que o tlb seja gravável antes de abrir.
  • Se estiver editando uma biblioteca de tipos independente, você DEVE ter um projeto aberto.Por alguma razão, se você abrir uma biblioteca de tipos por conta própria, ela não será salva.Crie um projeto em branco e abra sua biblioteca de tipos.Por alguma razão, isso permite que a biblioteca de tipos seja salva.
  • Se sua biblioteca de tipos for usada por um aplicativo ou COM+, certifique-se de que o aplicativo esteja encerrado ou o COM+ desabilitado antes de abrir a biblioteca de tipos.Quaisquer aplicativos abertos impedirão que a biblioteca de tipos seja salva.

No entanto, acho que sua melhor solução é provavelmente uma atualização.Você também obtém suporte para Unicode.

Usar o Delphi 2009 aliviou muito o trabalho de enormes arquivos TLB, e a conversão de nossos objetos existentes foi fácil, mas nossos objetos com não usam nenhuma biblioteca de terceiros.

Estaremos migrando nossos aplicativos GUI assim que os fornecedores de bibliotecas lançarem versões suportadas.

A mesma experiência com a interface TLB aqui:simplesmente paramos de usá-lo.

Trabalhamos com vários arquivos IDL separados (construídos manualmente) para diferentes partes de nossa estrutura, fazendo uso da construção #include para incluí-los no IDL do aplicativo real e, em seguida, gerar o único tlb usando MIDL e tlibimp-lo.Se o aplicativo não tiver IDL próprio, uma versão pré-compilada dos diferentes arquivos TLB da estrutura estará disponível.

Sempre que o framework entra em uma nova versão, um script é executado para gerar novamente os GUIDS em todas as interfaces necessárias nos arquivos IDL.

Isso nos serviu bem por muitos anos e, para migrarmos, o novo conjunto de ferramentas IDL/TLB do Delphi 2009 terá que ser não apenas integrado ao IDE, mas também versátil quando se trata de compilações automatizadas e outros enfeites.Mal posso esperar para sujar as mãos com alguns experimentos!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top