摘要:儘管我有時候對C#和這種基於架構的開發模式很厭倦,或者說.NET Framework多少讓人覺得有點束縛,但是有時候你不得不感歎它讓我們的開發變得多麼輕鬆。比如這裡提到的訪問Windows Mobile的連絡人。
keywords
POOM,windows mobile,PocketOutlook,Contacts,.NET Compact Framework,C#,C++
前兩天有朋友問及Poom的問題,其實SDK下面有一些例子已經寫得比較清楚了。在Windows Mobile 5以後,有了Microsoft.WindowsMobile.PocketOutlook 命名空間。這讓POOM編程變得十分簡單,同樣是擷取連絡人,我們將會看到使用VC++和VC#的不同。下面來看看使用Managed 程式碼C#是如何?的。
首先建立一個Outlook會話執行個體:OutlookSession mySession = new OutlookSession();
然後直接存取Contacts屬性:int index = 0;
Contact contact = new Contact();
//當前連絡人為零則添加一個連絡人
if (session.Contacts.Items.Count <= 0)
{
contact.FirstName = "Contact";
contact.LastName = "With Picture";
session.Contacts.Items.Add(contact);
}
else
{
contact = session.Contacts.Items[0];
}
//接著你可以對你的Contact對象做你想作的事了
怎麼樣,簡單吧:-)
PS:關於Pocketoutlook的Contact可以參考SDK相應Sample目錄下的AddPictureToContact例子.
再來看看VS的C++Smart Device的project中,如何建立一個訪問PocketOutlook的會話:
1.首先要通過聲明一個IPOutlookApp 介面,並初始化IPOutlookApp指標(注意,這可不是C#,所以初始化是必不可少的):IPOutlookApp *pMyPoomApp = NULL;
2.接下來,你需要使用CoInitializeEx API初始化COM(注意:POOM API是基於COM的一組API):CoInitializeEx(Null,0);
3.使用CoCreateInstance API為你的應用程式建立一個COM對象:CoCreateInstance(CLSID_Application, NULL, CLSCTX_INPROC_SERVER,
IID_IUnknown, (void **) &pUnknown);
4.接下來你需要使用QueryInterface方法將上面的COM對象和IPOutlookApp介面關聯起來 pUnknown->QueryInterface(IID_IPoutlookApp, (void **) &pMyPoomApp);
5.最後,你需要使用Logon()方法,登陸Pocket Outlook COM服務:pMyPoomApp->Logon(NULL);
6.使用建立好的pMyPoomApp取得連絡人檔案夾(預設編號為10):IFolder *pFolder;
pMyPoomApp->GetDefaultFolder(10, &pFolder);
7.聲明一個泛型PIM項集合,用來放置後來擷取的連絡人:IPOutlookItemCollection *pGenericItems;
pFolder->get_Items(&pGenericItems)
8.擷取連絡人IContact * pContact=NULL;
int len;
pGenericItems->get_Count(&len);
for (int i =0 ; i < len; i++) {
pGenericItems->Item(i, &pContact);
}
- -!!!這個確實有點麻煩吧。可以參照WM5下的PoomMaster的例子,在這個目錄下:
??\Program Files\Windows Mobile 5.0 SDK\Samples\PocketPC\CPP\Win32\Poommaster
在以後的文章中,會詳細的介紹Pocketoutlook的編程。最後,得感謝.NET CF團隊的工作,是他們讓.NET 程式員的開發變得簡單高效:-)
Enjoy!
Freesc Huang
黃季冬<fox23>@HUST
2008/4/9