• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            milkyway的窩

            最初想法的誕生地

             

            RAPI初始化算法和SAMPLE CODE

            來自 http://www.cnblogs.com/walzer/archive/2006/02/05/325605.html

            作者:Walzer
            日期:2005.12.12

            RAPI全寫為Remote Application Interface, 就是PC端調(diào)用這組API, 通過ActiveSync來操作TARGET端WindowsCE作業(yè). 這個(gè)功能估計(jì)以后在WINCE或WIN MOBILE的應(yīng)用上會(huì)用到許多

            我今天修改了同事留下的Updateboot.exe的代碼, 改進(jìn)藍(lán)牙讀寫的模塊. 這個(gè)地方我們用到了RAPI, 看一下他們?cè)诔绦蛑谐跏蓟疪API的做法

            ?HRESULT hRapiResult;
            ?hRapiResult = CeRapiInit();
            ?if(hRapiResult != S_OK)
            ?{
            ???? m_ValueEdit.SetWindowText((LPCTSTR)"初始化RAPI失敗");
            ???? return;
            ?}

            看起來是平淡無奇, 實(shí)際上單步一下就可以發(fā)現(xiàn)運(yùn)行到CeRapiInit()時(shí), 程序就BLOCK在這里了,死活走不下去, 并沒有達(dá)到?if(hRapiResult != S_OK)的預(yù)期目的. 我查了一下CeRapiInit()的說明:

            A call to CeRapiInit does not return until the connection is made, an error occurs, or another thread calls CeRapiUninit.

            也就是說像我現(xiàn)在并沒有把板子和PC相連并啟動(dòng)ACTIVE SYNC時(shí), 這個(gè)CeRapiInit()是肯定賴著不走了, 程序會(huì)死在這里. (鄙視一下誰寫的代碼,這個(gè)坑好大啊) ?因此想到了重新創(chuàng)立個(gè)等待進(jìn)程調(diào)用CeRapiUninit來干掉它. 不過這樣做顯然不厚道, 創(chuàng)立進(jìn)程需要占用更多的內(nèi)存. 所以用了上句說明的下半段:

            The CeRapiInitEx function does not block the calling thread. Instead, it uses an event to signal when initialization is complete.

            建立個(gè)事件, 用WaitForSingleObject來等他, 超時(shí)就BYEBYE了. 貢獻(xiàn)自己寫的如下代碼, 以后RAPI INIT可以參考

            BOOL?RapiInitialzation()
            {
            ????RAPIINIT?struRapiInit;???
            //這個(gè)是CeRapiInitEx函數(shù)要求的入口參數(shù)
            ????DWORD?dwWaitResult?=?0;??//等待初始化完成事件的變量
            ????HRESULT?hRapiResult?=?NULL;?//CeRapiInitEx的返回HANDLE

            ????
            if?(?m_bRapiInitFlag?==?FALSE?)?//全局的一個(gè)FLAG,如果初始化過就不再重復(fù)了
            ????{
            ????????struRapiInit.cbSize?
            =?sizeof(RAPIINIT);??//填滿該結(jié)構(gòu)體僅有的三個(gè)成員
            ????????struRapiInit.hrRapiInit?=?NULL;??//明知是輸出參數(shù)也順手填一下,?我以前吃過虧,?驚弓之鳥
            ????????struRapiInit.heRapiInit?=?NULL;

            ????????hRapiResult?
            =?CeRapiInitEx(&struRapiInit);??//關(guān)鍵點(diǎn)

            ????????m_ValueEdit.SetWindowText((LPCTSTR)
            "Wait?2?second?for?RapiInit");?//后面2秒程序要頓一下了,?得告訴用戶.??m_ValutEdit和對(duì)話框里一個(gè)IDC_STATIC關(guān)聯(lián)了.
            ????????dwWaitResult?=?WaitForSingleObject(struRapiInit.heRapiInit,?2000);??//關(guān)鍵點(diǎn)

            ????????
            if(?hRapiResult?==?S_OK?&&?
            ????????????struRapiInit.hrRapiInit?
            ==?S_OK?&&
            ????????????dwWaitResult?
            !=?WAIT_TIMEOUT)????//保守起見,?三個(gè)返回值都判斷
            ????????{
            ???????????m_bRapiInitFlag?
            =?TRUE;
            ???????????
            return?TRUE;
            ????????}
            ????????
            else
            ????????{
            ????????????m_ValueEdit.SetWindowText((LPCTSTR)
            "The?initialization?of?RAPI?falied,?you?need?to?install?an?ActiveSync?or?connect?the?IPTV?to?PC");???//一般是沒連接導(dǎo)致,?當(dāng)然也可能用戶沒裝ActiveSync
            ???????????return?FALSE;
            ????????}
            ????}
            ????
            else
            ????{
            ?????????m_bRapiInitFlag?
            =?TRUE;
            ?????????
            return?TRUE;
            ????}
            }

            posted on 2007-01-16 09:42 milkyway 閱讀(3030) 評(píng)論(1)  編輯 收藏 引用 所屬分類: wince(別人的文章技巧總結(jié))

            評(píng)論

            # re: RAPI初始化算法和SAMPLE CODE 2007-01-16 09:44 相思酸中有甜

            另一篇文章 http://www.cnblogs.com/yakin/archive/2005/07/20/196569.aspx

            RAPI:Remote Application Programming Interface

            RAPI是基于ActiveSync的.所以在Device要加ActiveSync的組件,同時(shí)PC端要裝ActiveSync。這樣Device是server端,PC是Client端。
            我是用VC6.0作為工具編寫PC端APP來控制Device的。當(dāng)然我們?cè)瓉淼腣C中并沒有包含RAPI的相關(guān)API實(shí)現(xiàn),所以要添加RAPI的相關(guān)lib文件和頭文件:RAPI.lib和RAPI.h。同時(shí)要在project\settings里面設(shè)置連接RAPI.lib。
            相關(guān)編程環(huán)境建立后就可以開始編程了。

            1) 初始化RAPI。
            開始編寫的時(shí)候忘了這一點(diǎn),結(jié)果總是不行。后來在網(wǎng)上狂搜,搜到了微軟日本的一篇相關(guān)文章,才搞明白。日語里面有很多漢字,大體還知道他在說什么,看來武大郎的故事有可能是真的哦!
            HRESULT hr = CeRapiInit(); //must initilize RAPI first before performing other operation.
            if ( hr != ERROR_SUCCESS )
            { return; }

            2) 下面以修改藍(lán)牙注冊(cè)表為例:
            打開注冊(cè)表:
            wcscpy((wchar_t *)Name, L"Software\\Microsoft\\Bluetooth\\HCI\\psKey");
            if ((lRet = CeRegOpenKeyEx(HKEY_LOCAL_MACHINE, (wchar_t *)Name, 0, 0, &hChildKey)) == ERROR_SUCCESS)
            {.......}
            RAPI的函數(shù)都使用unicode,所以所有字符串都必須是unicode形式。這一點(diǎn)要注意。

            查詢注冊(cè)表的值:
            if (ERROR_SUCCESS == (lRet = CeRegQueryValueEx(hChildKey,
            L"Pskey2", NULL, &dwType, (LPBYTE)Data,
            &dwSize)))

            修改注冊(cè)表的值:
            if(ERROR_SUCCESS == (lRet = CeRegSetValueEx(hChildKey,
            L"Pskey2", NULL, NULL, (LPBYTE)&wData,
            sizeof(wData))))

            然后關(guān)閉注冊(cè)表項(xiàng):
            CeRegCloseKey(hChildKey);

            3) 關(guān)閉RAPI
            CeRapiUninit();


            我對(duì)RAPI的了解只是皮毛。隨著了解的深入,我們可以用它寫出強(qiáng)大的應(yīng)用程序,比如完美的通過ActiveSync的升級(jí)程序。

              回復(fù)  更多評(píng)論   

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            隨筆皆原創(chuàng),文章乃轉(zhuǎn)載. 歡迎留言!

            常用鏈接

            留言簿(37)

            隨筆分類(104)

            隨筆檔案(101)

            文章分類(51)

            文章檔案(53)

            wince牛人

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            97超级碰碰碰碰久久久久| 久久综合久久美利坚合众国| 欧美午夜A∨大片久久 | 精品久久久久一区二区三区 | 热综合一本伊人久久精品| 精品国产综合区久久久久久| 国产成人久久久精品二区三区| 久久成人影院精品777| 久久无码av三级| 国产香蕉97碰碰久久人人| 国产精品伊人久久伊人电影| 精品久久久久久久久久久久久久久 | 国产精品久久久香蕉| 精品国产日韩久久亚洲| 久久久久久久91精品免费观看| 久久成人国产精品免费软件| 亚洲愉拍99热成人精品热久久 | 亚洲中文字幕久久精品无码喷水| 无码人妻久久一区二区三区| 久久精品国产亚洲av影院| 色综合久久中文综合网| 久久精品国产一区二区电影| 国产精品久久久久久久app| 嫩草伊人久久精品少妇AV| 精品亚洲综合久久中文字幕| 久久九九久精品国产免费直播| 波多野结衣久久精品| 欧美丰满熟妇BBB久久久| 久久精品国产第一区二区| 日韩AV无码久久一区二区 | 久久国产热这里只有精品| 久久国产亚洲精品| 久久精品国产69国产精品亚洲| 久久综合九色欧美综合狠狠 | 久久成人影院精品777| 中文字幕无码久久精品青草 | 久久精品成人欧美大片| 久久99精品久久久久婷婷| 午夜精品久久影院蜜桃| 国产美女久久久| 欧美黑人又粗又大久久久|