quinta-feira, dezembro 11, 2008

LightScribe - Parte 3: O SDK

Nas partes anteriores (aqui e aqui), descrevi a tecnologia LightScribe e os aplicativos disponíveis para a impressão de rótulos em CD e DVD usando o LightScribe. Nesta parte final vamos ver como fazer os nossos próprios aplicativos (ou acrescentar a impressão em um aplicativo já existente).

O SDK

O Kit de Desenvolvimento (SDK) também está disponível no site oficial. Como vou descrever adiande, dá até para desenvolver sem ele.

O SDK instala no seu micro:
  • A documentação (fraca) do SDK
  • Um arquivo de include (LSPrintLauncher.h) e uma library (LSPrintLauncher.lib) para usar com C ou C++
  • Um exemplo em C++, utilizando a MFC
Como É Feita A Impressão

Vou matar de cara o suspense e mostrar o cadaver atrás da cortina:
  • O seu programa cria a imagem a imprimir em um arquivo (bmp, png, jpg).
  • Você chama a função launchPrintOptions que está em LSPrintLauncher.dll.
  • launchPrintOptions dispara LSPrintDialog.exe que apresenta o diálogo de impressão.
  • Se o usuário confirmar a impressão, LSPrintDialog.exe dispara LSPrintingDialog.exe que faz a impressão.
Onde estão LSPrintLauncher.dll, LSPrintDialog.exe e LSPrintingDialog.exe? No LightScribe System Software (LSS) que eu mencionei na segunda parte.

Três Formas de Imprimir

Entendido o mecanismo de impressão, dá para perceber que temos três maneiras de imprimir:
  • Linkar LSPrintLauncher.lib e chamar diretamente a função launchPrintOptions. Isto é o mais simples mas pressupõe que (a) a sua linguagem permite linkar direto com uma library (b) a DLL e os .exes do LSS estão no path.
  • Linkar dinamicamente e LSPrintLauncher.lib e chamar indiretamente a função launchPrintOptions. A API do Windows possui as funções para carregar na memória uma DLL e localizar uma rotina dentro dela pelo nome. É "bruxaria nível 2", mas tem a vantagem de não precisar linkar a lib e poder localizar a DLL em tempo de execução (o modo oficial é olhando no registry em HKLM\SOFTWARE\LightScribe\LSPrintLauncher).
  • Chamar diretamente os executáveis. Isto pode criar problemas de compatibilidade se algum dia os nomes ou parâmetros dos executáveis forem alterados, mas dá para fazer até de arquivo batch.
Detalhes e Mais Detalhes

Obviamente estou resumindo bem a coisa. As 16 páginas da documentação do SDK tem um pouco mais de detalhes, principalmente os parâmetros das funções e dos executáveis. O parâmetro mais importante é o nome do arquivo com a imagem.

Um ponto importante é que os programas são rodados separados da sua aplicação. Isto pode criar o problema de saber quando o arquivo pode ser apagado. Uma opção interessante é deixar o programa de impressão apagá-lo quando não precisar mais dele, neste caso é recomendado criar o arquivo com um nome único no diretório temporário do usuário.

Além de launchPrintOptions, a DLL possui as rotinas launchPrint (que dispara a impressão) e haveLSDrive que informa se existe uma unidade LightSribe no micro.

Nenhum comentário: