CEMAPI實戰攻略(一) 準備工作

2021-05-22 21:29:18 字數 4485 閱讀 9757

一.準備工作

1.       開發環境和裝置平台

windows mobile 6.0 中文版**器:

成功安裝sdk以後,我們可以在建立乙個智慧型裝置應用程式平台選擇的「已安裝的sdk」列表中看到上述兩個平台的名稱。見下圖:

圖1.1

另外,本文所討論的內容以及所有源**均在windows xp,vs2005,wm5.0/6.0和夏新的n810(wm5.0系統)平台上測試和實現。

b)         如何使用cellular emulator測試我的簡訊應用程式

與開發一般的應用程式不同,使用cemapi庫開發簡訊應用程式會遇到的第乙個問題,也是非常關鍵的問題就是如何測試程式。再真機上開發我們可以通過飛信等免費的簡訊傳送工具對應用程式進行測試,但通常我們沒有在真機上開發應用程式的條件和環境,那麼我們該如何對簡訊應用程式進行測試呢?在wm6.0 sdk推出以前,我們都是採用在模擬器中向14250010001這個號碼傳送簡訊的方式來測試簡訊應用。這個號碼是模擬器預設的本機號碼,向這個號碼傳送簡訊,模擬器將會收到所傳送的資訊。這個號碼是您首先應該記住的。但是僅僅使用這些去測試我們的應用程式還是遠遠不夠的,因為您在模擬器中所接收到的簡訊,傳送者和接受者的屬性將永遠是14250010001這個號碼,顯然,我們需要更強大的測試環境。

可喜(或者是可悲)的是,微軟終於也意識到了這個問題,為了更好的幫助ppc手機軟體的開發者工作,wm 6.0 sdk中提供了乙個名為cellular emulator的小工具。通過這個小軟體,我們可以用不同的號碼想模擬器傳送簡訊或撥打**,模擬器可以再相對更大的範圍內進行測試。不幸的是,這個小工具只支援wm 6.0 **器,這是我選擇了wm 6.0 sdk作為本文的開發平台的主要原因。

下面以step by step的方式介紹一下cellular emulator的安裝與使用,以及再wm**器上的設定方法。別擔心,這非常簡單。

首先,如果您已經成功安裝了wm6.0 sdk ,那麼您實際上已經完成了cellular emulator的配置,您可以選擇「開始選單」——「windows mobile 6.0 sdk」——「tools」——「cellular emulator」來啟動該程式。如果您沒有安裝wm6.0 sdk,又想使用cellular emulator(我不知道再不安裝wm 6.0sdk的情況下使用安裝這個軟體有什麼意義),您可以在網路上找到相關資料。

其次,我們需要對wm**器端做乙個簡單的設定。請按照上面的步驟執行cellular emulator,注意介面左下角,記住這個com埠號碼(見圖1.2)。然後啟動wm**器(這個大家都應該會的),選擇「檔案」——「配置…」開啟「**程式屬性」對話方塊,選擇「外圍裝置」tab頁,可以看到「串列埠0」標題,見圖1.3和圖1.4

圖1.2

圖1.3

圖1.4

還記得剛才在cellular emulator上記住的哪個埠嗎?(圖1.2),將這個埠填入「串列埠0」的位置(如果下來選單中沒有,你可以手動輸入),然後重新啟動**器即可。

cellular emulator的設定已經全部完成了。很容易,不是嗎?接下來我們利用它發一條簡訊給**器。啟動cellular emulator,選擇「sms」tab標籤,在「send to device」對話方塊中填入你所要傳送的簡訊內容,並在下面的「phone number」位置填入任意號碼,單擊「send」,然後耐心的等上幾秒,wm6.0**器就會收到這條簡訊。值得注意的是,cellular emulator目前還不支援中文簡訊的傳送,因此如果您想測試中文簡訊,那麼還是要採用向本機號碼14250010001傳送簡訊的方式來進行測試。cellular emulator還有很多其它有趣的功能,由於與本文討論的內容無關,如果有興趣,大家自己來挖掘吧。

注:如果**器沒有接收到簡訊,請重啟一下計算機

c)         如果使用的是wm5.0以前版本,我該如何測試我的程式?

前面已經提到過了,每個wm**器都會繫結乙個號碼作為本機號碼,您應該記住這個號碼:14250010001,您可以向這個號碼傳送簡訊,這樣wm模擬器可以接收到這條簡訊。不過,簡訊的收件人和發件人屬性將永遠是14250010001。

2.       如何匯入cemapi庫、

cemapi提供了dll和lib兩種形式共開發者呼叫,本文選用最傳統的lib呼叫方式來使用該庫(這不意味著你就可以不用dll檔案,lib中存放的只是符號的宣告,真正的實現再dll中)。與所有lib靜態庫一樣,cemapi也包括cemapi.h和cemapi.lib兩部分,我們可以像匯入其它庫的方式匯入該lib庫。兩種方式如下:

第一種方式:再選單中單擊「專案」——「屬性」進入「專案屬性頁」,在「專案屬性頁」左側的樹形列表中選擇「配置屬性」——「聯結器」——「輸入」,在右側「附加依賴項」的位置輸入cemapi.lib,見圖1.5

圖1.5

第二種方法:在源程式中加入如下**,同樣可以匯入靜態庫

#pragma comment(lib,」cemapi.lib」)

採用上述兩種方式匯入lib庫以後,需要再源程式中包含cemapi.h標頭檔案,這樣我們就可以使用cemapi中物件了。

3.       初始化和釋放mapi

像使用csocket連線開發網路應用程式時,需要進行初始化一樣,在使用cemapi前也需要對先對元件進行初始化。由於cemapi用到了com元件庫,因此首先需要呼叫coinitializeex()對com元件庫進行初始化,然後再呼叫mapiinitialize()對cemapi進行初始化,這樣做的目的是告訴系統,從現在開始我要使用cemapi了。當不再需要使用cemapi的時候,我們需要使用mapiuninitialize()和couninitailize()函式釋放對cemapi和com的引用。coinitializeex函式不再本文的討論範圍之內,我們只給出它的呼叫方式,至於為什麼要選擇這些引數,以及這些引數的作用,大家可以再網路上蒐集一下相關資料,呼叫**如下:

hresult  hr;

hr=coinitializeex(null,coinit_multithreaded);    //初始化com

if(failed(hr))

//異常處理

mpaiinitialize(lpvoid  lpmapiinit) 以函式指標的形式被被定義在mapix.h檔案中,其定義如下:

typedef hresult (stdapicalltype mapiinitialize)(

lpvoid          lpmapiinit

mapiinitialize mapiinitialize;

該函式返回乙個hresult型別的物件,我們可以通過它來判斷函式是否呼叫成功。

mapiinitialize函式有乙個lpvoid引數,這個引數再cemapi中是不需要的。由於cemapi來自與mapi,而mapi原本用於再windows平台下對exchange,outlook等郵件系統進行操作的而封裝的庫,當再桌面系統上的不同平台上執行時,可以通過傳遞給mapiinitialize函式乙個mapiinit_0的結構體來確定使用的版本和工作平台(比如nt系統)。cemapi是mapi在移動平台上的版本,因此保留了函式原型,這個引數在mobile上並沒有被用到,直接設定為null即可。

當使用完畢以後,需要採用如下方式釋放對cemapi的呼叫以及對com庫的引用。

mapiuninitialize();     

couninitialize();       

4.       本小節的源程式

//初始化cemapi

void initmapi()

hresult hr=0;

hr=coinitializeex(null,coinit_multithreaded);    //初始化com

if(failed(hr))

//異常處理

hr=mapiinitialize(null);                  //初始化mapi

if(failed(hr))

//異常處理

return;

//釋放cemapi

void uninit()

hresult hr;      

hr=mapiuninitialize();

if(failed(hr))

//異常處理

couninitialize();

return;

CEMAPI實戰攻略(一)

一 準備工作 1.開發環境和裝置平台 windows mobile 6.0 中文版 器 成功安裝sdk以後,我們可以在建立乙個智慧型裝置應用程式平台選擇的 已安裝的sdk 列表中看到上述兩個平台的名稱。見下圖 圖1.1 另外,本文所討論的內容以及所有源 均在windows xp,vs2005,wm5...

websocket之一 準備工作

最近做個專案,涉及管理前端不少裝置,當然真正的管理是在平台上,那麼就需要平台與前端通訊,專案組選擇websocket協議,沒搞過,摸索著搞,順便記點吧,由於是根據記憶而寫,可能會有些出入,但不大。1 cmake安裝 tar zxvf cmake 2.8.12.2.tar.gz cd cmake 2....

websocket之一 準備工作

最近做個專案,涉及管理前端不少裝置,當然真正的管理是在平台上,那麼就需要平台與前端通訊,專案組選擇websocket協議,沒搞過,摸索著搞,順便記點吧,由於是根據記憶而寫,可能會有些出入,但不大。1 cmake安裝 tar zxvf cmake 2.8.12.2.tar.gz cd cmake 2....