segunda-feira, abril 09, 2007

A Dura Vida do Desenvolvedor para Windows CE

A história do Windows CE

Em 1994 a Microsoft iniciou o desenvolvimento de um novo sistema operacional de 32 bits, destinado a sistemas dedicados e/ou embarcados. Dadas as restrições de memória e capacidade de processamento destes sistemas, foi adotado um subconjunto da API Win32, reduzindo a funcionalidade e removendo funções redundantes. Embora tenham sido aproveitadas as APIs e idéias dos outros dois Windows de 32 bits da Microsoft (Windows 95 e NT), o código fonte do Windows CE é em grande parte novo. Como o NT, O Windows CE foi projetado para suportar diversos modelos de processadores.

Uma característica importante do Windows CE é a modularidade. Um fabricante de hardware pode selecionar os módulos que necessita (usando uma ferramenta gráfica, o Plataform Builder) e gerar uma versão do Windows CE contendo apenas os recursos que necessita. Neste processo o fabricante acrescenta os drivers e aplicações específicas ao seu equipamento. Uma das aplicações importantes a serem acrescentadas é o Shell que é o módulo responsável pela interface com o operador (por exemplo, apresentação do desktop para os dispositivos que o tiverem).

Ao contrário das demais versões de Windows, a Microsoft não comercializa o Windows CE diretamente para usuários. A Microsoft licencia o Windows CE para os fabricantes que o disponibilizam para os usuários.

Palm-Sized PC, Pocket PC e Windows Mobile

A própria Microsoft gera versões específicas do Windows CE. Basicamente, a Microsoft define os requisitos da plataforma de hardware (em alguns casos bastante específicos), desenvolve alguns drivers e aplicações (notamente o Shell) e licencia o resultado para os fabricantes de hardware. Os times que geram estas versões específicas são times separados dos que desenvolvem o sistema operacional.

Uma destas versões foi o Palm-sized PC, baseado no Windows CE 2.1. Esta foi a primeira experiência da Microsoft em projetar um PDA. O resultado não foi muito animador: a interface com o usuário era desconfortável e o desempenho irritante no hardware disponível na época.

A plataforma PDA seguinte veio em 2000 com um novo nome: PocketPC (talvez devido às pressões da Palm contra o nome anterior). Baseado no Windows CE 3.0 e com uma especificação de hardware mais recheada de MHz e Megabytes, permitiu à Microsoft fincar o pé definitivamente no mercado de PDAs.

A versão seguinte foi o Pocket PC 2002 (a versão original do Pocket PC foi retroativamente denominada de Pocket PC 2000), ainda baseada no Windows CE 3.0.

O nome foi alterado novamente na versão seguinte, que foi o Windows Mobile 2003, baseada no Windows CE .Net 4.0 (sim, o nome do sistema também mudou). A ele se seguiram o Windows Mobile 2003 Second Edition e o Windows Mobile 5.0.

Vários fabricantes fabricaram e fabricam para o "mercado de consumo" PDAs baseados nestes padrões. Estes fabricantes costumam lançar com frequência novos modelos. Uma pergunta comum dos compradores destes equipamentos é sobre a atualização do sistema operacional. Como vimos, os fabricantes é que tem a responsabilidade de gerar e disponibilizar estas novas versões, o que normalmente não preferem não fazer.

Um outro mercado que usa estes padrões é o de coletores de dados. Neste caso estamos falando de equipamentos mais robustos e caros (às vezes dez vezes mais caros que um PDA) e que são produzidos com volumes muito menores. Por estes motivo, não é incomum os fabricantes comercializarem a atualização do sistema operacional. Um outro ponto é que as exigências de hardware destes padrões são às vezes rigorosas demais para o mercado de coletores de dados (por exemplo, o Pocket PC exige um microfone e um botão para a função de gravação de voz). Em alguns modelos os fabricantes de coletores preferem fugir destes padrões e gerar a sua própria versão do Windows CE. Mesmo nos modelos compatíveis com os padrões às vezes é oferecida uma opção de menor custo baseada em uma versão customizada do Windows CE.

Desenvolvendo Para o Windows CE

A primeira dificuldade já deve estar óbvia: conviver com uma nomenclatura mutante e confusa.

O segundo ponto é que cada uma destas plataformas tem um SDK próprio. Particularmente no caso dos coletores de dados, existem diferenças de fabricante para fabricante e os modelos antigos (dada a sua robustez) se recusam a morrer. No caso dos coletores baseados em um padrão da Microsoft, normalmente é necessário instalar primeiro o SDK da Microsoft e depois o SDK do fabricante.

Algumas pessoas pensam que sendo o Windows CE um Windows, deve dar para executar os mesmos programas que no desktop. Como vimos, a API do Windows CE é diferente da Win32 do desktop. Na maioria dos casos, o processador é diferente. A memória disponível é muito menor e não existe disco. E, talvez o mais importante, a forma de operação é completamente diferente.

Inicialmente a Microsoft vendia Toolkits para o Visual C++ e Visual Basic (versões 5 e 6) para o desenvolvimento para o CE. No caso do VB, a linguagem era semelhante ao VBA e não ao VB propriamente dito.

Junto com o Pocket PC, a Microsoft lançou o eMbedded Visual Tools, composto pelo eMbedded Visual C++ (eVC) e do eMbedded Visual Basic (eVB). Estes produtos são gratuitos e sairam direto na versão 3. O eVC é bastante completo, incluindo os frameworks ATL e MFC. O eVB continuou sendo baseado no VBA.

Com o Pocket PC 2002 foi lançado o eVC 4 (o eVB morreu na versão 3 mesmo). Os SDKs anteriores continuavam exigindo o eVC3. É possível instalar na mesma máquina as duas versões do eVC, porém o ícone do programa é o mesmo e o Open With... se recusa a distinguir as duas.

Com o Windows CE .Net passou a estar disponível o Compact Framework para desenvolvimento usando C# e VB.Net. Entretanto, isto não ficou pronto a tempo para inclusão no Visual Studio .Net 2002 e acabou sendo disponilizado como um download gratuito. O Visual Studio .Net 2003 incluiu isto (da mesma forma que incluiu outras funcionalidades e correções de bugs que não ficaram prontas em 2002) e o download para o VS 2002 sumiu.

O Visual Studio 2005 absorveu a funcionalidade do eVC. E chegamos assim à data atual, quando resolvo fazer meu primeiro projeto em C para CE no VS 2005. Seleciono Smart Sevice Win32 Project, informo o nome do projeto e ... nada. Discretamente na linha de status aparece a mensagem "project creation failed". Vários minutos no Google e localizo a solução mágica, que reproduzo abaixo, em:
http://blogs.msdn.com/jeffabraham/archive/2007/02/13/are-you-having-issues-creating-native-projects.aspx

1) [opcional] Acenda uma vela vermelha de cada lado do micro. Sacrifique uma galinha preta sobre o teclado.

2) Feche o Visual Studio.

3) Chame o RegEdit e navege para

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Ext\PreApproved

4) Crie uma nova chave com o nome

{D245F352-3F45-4516-B1E6-04608DA126CC}

5) Feche o RegEdit e rode novamente o Visual Studio

É um problema conhecido que ocorre quando se faz upgrade para o Vista ou se instala o Internet Explorer 7. A solução está incorporada no Service Pack 1 do VS 2005.

É mole?

5 comentários:

Anônimo disse...

Por muito tempo eu estáva criando novos projetos em EVC4 para usar em VS2005. Muito obrigado por ter achado esta solução.

Larry Bank

http://bitbank.wordpress.com

Anônimo disse...

Navegando pela net em busca de informações achei estes posts muito valiosos.
Estou no mesmo barco. Comprei um coletor MC1000 da symbol e ele vem com windows cE 4.20 .net. Estou utilizando o vs2003 para programar. No emulador tudo funciona mas chega a hora de transferir para o dispositivo e começam os problemas. Já instatei o compact framework e tudo, compilo e o projeto e jogo o executável para o coletor mas na hora de executar diz que não é um programa válido.
hehe
estou a procura de informações.
abraços.

Luis Wagner
luis.wagner@gmail.com

jronaldo disse...

Olá amigo,

Voce sabe algum link, para download do Windows CE,

grato,

Jonisson Amaral disse...

Daniel boa tarde, gostaria de lhe pedir um tutorial alguma aplicacao simples pra fazer no windows ce. Sou programador em java..engatinhando ainda..muito chao pela frente. Queria lhe pedir para fazer um tutorial ou entao citar algum site ou link demonstrando o desenvolvimento no windows ce 6.0. DESDE JA MUITO OBRIGADO DANIEL !

Jonisson Amaral disse...

Daniel boa tarde, gostaria de lhe pedir um tutorial alguma aplicacao simples pra fazer no windows ce. Sou programador em java..engatinhando ainda..muito chao pela frente. Queria lhe pedir para fazer um tutorial ou entao citar algum site ou link demonstrando o desenvolvimento no windows ce 6.0. DESDE JA MUITO OBRIGADO DANIEL !