One very frustrating thing about programming with the .NET Compact Framework is that it's quite limited in how much integration capabilities you have with the device. It's very good if you build a little application that doesn't need to hook into the device, or hook into Outlook, but as soon as you want to do something like that you have to use p/invoke which involves hunting down the signatures, and testing code that I don't really understand. Luckily p/invoke.net has many of them already.

However, there are two really good options that I recently discovered.

OpenNETCF.org

This set of .NET assemblies helps you overcome a plethora of shortcomings of the compact framework. The folks who developed this did an amazing job providing excellent functionality to .NET developers. Some of my favorites namespaces are OpenNETCF.Win32 which wraps most of the p/invoke functions you'll need as well as OpenNETCF.Windows.Forms which provides some very nice Controls that .NET doesn't provide like Groupbox, NotifyIcon, Battery indicators and so on.

PocketOutlook In The Hand 

This is a superb managed Outlook Object model. Today, it's impossible to talk to Outlook on a Pocket PC using p/invoke because the framework does not allow you to call COM objects. The object model is mostly identical to the OM of it's big brother, Outlook XP/2003.

I hear that 2.0 of the framework allows you to call COM objects, but until then, avoid writing C code and head on over to InTheHand to get Pocket Outlook. It's not free, but there is a trial you can play with, and it's priced modestly. One caveat though. You need to be very careful and make sure to dispose all your objects. I didn't do this and ended up with a very sad Pocket PC after running my app for a few hours.