Usando O Pocket Outlook Object Model no Windows Mobile 5.0 com o Visual Studio 2005

Aprenda a usar objetos COM com o Windows Mobile

 

Introdução

O Windows Mobile 5.0 trouxe diversas vantagens para os desenvolvedores, novos controles, novos recursos, melhor gerenciamento de memória e desempenho. Mas um dos mais esperados e mal compreendidos é o suporte a objetos COM.

“COM??” Isso mesmo, o já idoso Commom Object Model, que o pessoal que programa com Visual Basic 6 conhece tão bem. “Mas existe COM no Windows Mobile?”. Sim, quer dizer, mais ou menos. Vou explicar melhor.

O suporte ao COM que existe no Windows Mobile é semelhante ao suporte encontrado no Windows Desktop, porém algumas interfaces e funcionalidades não existem no Windows Mobile. Isso particularmente não é um problema, já que os objetos do WM5.0 tendem a ser mais simples do que os encontrados no Windows XP, por exemplo.

Antes do WM5.0 não havia como “importar” um objeto COM para seu projeto de dispositivo móvel, como fazemos normalmente num projeto ASP.NET ou Windows Forms, por exemplo. Agora, existe um suporte “parecido” a esse tipo de referência, de forma que podemos criar “interop’s” para os objetos COM do WM5.0.

Neste artigo, vamos criar uma pequena aplicação para interagir com o Pocket Outlook Object Model e obter a lista de contatos do dispostivo. O POOM é disponibilizado como um objeto COM no WM5.0.

Através do POOM você pode interagir com a lista de contatos do dispositivo, bem como receber e enviar e-mails, SMS, etc.

Vamos lá.

Preparando o ambiente

Tenho de ressaltar que todo o processo descrito neste artigo foi feito com o Beta 2 do Visual Studio 2005. Provavelmente isso não deve mudar quando a versão final for liberada, mas recomendo o leitor atenção se for utilizar o conhecimento descrito aqui com a versão comercial do VS 2005.

O modo mais fácil de usar objetos COM a partir de código gerenciado é inicia com uma type library que define as classe e interfaces do objeto. Por algum motivo bizarro (mais um), a type library do POOM não vem junto com o SDK do WM 5.0, logo teremos que gerar esse arquivo manualmente. É uma tarefa simples. Você  precisa instalar o SDK do PocketPC ou do Smartphone para poder encontrar a ferramenta midl.exe, que será usada para criar a type library.

Você também irá precisar do arquivo IDL do POOM (pimstore.idl), que também não vem com o SDK (querem complicar mesmo). Você pode obter esse arquivo facilmente usando sua ferramenta de busca preferida. Uma vez obtido esse arquivo, copie-o para o diretório include do SDK e use o midl.exe para criar a type library:

 

C:\Arquivos de Programas\Windows CE Tools\wce420\POCKET PC 2003\Include\Armv4>midl pimstore.idl

 

Observe que foi gerado um arquivo chamado pimstore.tlb dentro do diretório. Esse arquivo será necessário para gerar o Assembly no passo a seguir.

Criando o Assembly Interop para a Type Library

A princípio, o arquivo pimstore.tlb deveria ser suficiente para que o Visual Studio criasse o Assembly de Interop, mas na versão beta isso ainda  não é possível. Então mais uma vez teremos de criar o Assembly manualmente.

Usando a ferramenta tlbimp.exe, que vem no Framework do .NET, podemos criar o Assembly facilmente a partir do arquivo tlb, como a seguir:

 

C:\Arquivos de Programas\Windows CE Tools\wce420\POCKET PC 2003\Include\Armv4>tlbimp pimstore.tlb

 

Observe que foi gerado um arquivo chamado PocketOutlook.dll no diretório. É essa dll que iremos usar em nosso projeto.

Então crie um projeto para dispositivos móveis (PocketPC ou Smartphone), adicione a referência a dll que foi criada e pronto. Você está pronto para usar o POOM dentro de seu programa em .NET!

Criando o código

Irei mostrar apenas um exemplo de como usar o objeto que criamos. Talvez em um outro artigo eu aborde o POOM especificamente, mas como os objetos estão agora gerenciados, uma olhada na interface deles já irá responder muito sobre sua forma de utilização.

Veja o código da listagem 1:

 

// Cria a instância do objeto principal e faz o login

ApplicationClass outlookApp =  new PocketOutlook.ApplicationClass();

outlookApp.Logon(0);

 

// Obtem o folder “Contatos”

Folder contactsFolder = outlookApp.GetDefaultFolder(OlDefaultFolders.olFolderContacts);

                       

// Varre todos os contatos  

PocketOutlook.Items contacts = contactsFolder.Items;

for (int i = 0; i < contacts.Count; i++)

{

      // Obtem o objeto que representa um contato

      ContactItem contact = (ContactItem) contacts.Item(i + 1);

 

      // O objeto contato tem propriedades de acesso a

      // nome, e-mail, telefone, etc..

}

 

// Encerra o uso do objeto

outlookApp.Logoff();

Listagem 1 –Código exemplo

 

Conclusão

O uso de objetos COM em programas para o Windows Mobile abre uma série de novas possibilidades. Existem objetos COM para o Outlook, o Pocket Internet Explorer, o Pocket Media Player e assim por diante. Os procedimentos descritos neste artigo valem para qualquer objeto COM, então mãos a obra!