• <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>
            franksunny的個(gè)人技術(shù)空間
            獲得人生中的成功需要的專注與堅(jiān)持不懈多過天才與機(jī)會(huì)。 ——C.W. Wendte

             

            EasyDgm是一個(gè)用于攔截短消息,發(fā)送短信的插件代碼。用該插件攔截短信沒有提示音,發(fā)送也不提示用戶。但是本身該代碼是老外開發(fā)的,只是針對8位編碼的字符,沒有根據(jù)我們中文的編碼來做成完全Unicode版本的,為此以下改寫就是實(shí)現(xiàn)Unicode字符串的發(fā)送。

            1、  修改DatagramService工程中的代碼,將其內(nèi)用到的8位描述符修改為16位,具體修改的描述羅列如下:

            //修改前內(nèi)容

                   IMPORT_C static CDatagram* NewL(TDesC8& aBuf);

                   IMPORT_C static CDatagram* NewL(const TDesC8& aBuf,const TDesC8& aAddress);              IMPORT_C virtual const TDesC8& GetData();

                   IMPORT_C virtual void  SetDataL(const TDesC8& aData);

                   void ConstructL(const TDesC8& aBuf);

                   HBufC8* iData;

            //修改后內(nèi)容

                   IMPORT_C static CDatagram* NewL(TDesC& aBuf);

                   IMPORT_C static CDatagram* NewL(const TDesC& aBuf, const TDesC8& aAddress);              IMPORT_C virtual const TDesC& GetData();

                   IMPORT_C virtual void  SetDataL(const TDesC& aData);

                   void ConstructL(const TDesC& aBuf);

                   HBufC* iData;

            2、  修改SMSDatagramService工程中CSMSSender類的代碼,將其內(nèi)用到的8位描述符修改為16位,具體修改的描述羅列如下:

            //修改前

            void CreateSMSMessageL(const TDesC8& aText, const TDesC8& aAddress);

            void SendSMSL(const TDesC8& aText, const TDesC8& aAddress, TRequestStatus& aStatus);

            //修改后

            void CreateSMSMessageL(const TDesC& aText, const TDesC8& aAddress);

            void SendSMSL(const TDesC& aText, const TDesC8& aAddress, TRequestStatus& aStatus);

            3、  修改SMSDatagramService工程中CSMSSender類內(nèi)創(chuàng)建短信的函數(shù)CreateSMSMessageL內(nèi),將原來的代碼

            smsSettings.SetAlphabet(TSmsDataCodingScheme::ESmsAlphabet7Bit);

            改成適合unicode的通道值

            smsSettings.SetAlphabet(TSmsDataCodingScheme::ESmsAlphabetUCS2);

            4、  刪除原有的def,重新為兩份工程定稿dll,這個(gè)具體參看如何編寫dll

            以上操作已經(jīng)將EasyDgm插件修改成適合Unicode的代碼類型了,當(dāng)然該代碼中還有可以進(jìn)行優(yōu)化的部分,在這里就不多做贅述。

            具體使用的時(shí)候,可以參考S60v3_EasyDgmTest的例子,一般都是將里面的兩份代碼smsdatagramreceiver.cppsmsdatagramsender.cpp直接拿來用的,但是也要改成16位描述符。

            考慮到有些網(wǎng)友問我要修改后的EasyDgm代碼,先特給出下載地址 http://m.shnenglu.com/Files/franksunny/EasyDgm.rar

            posted @ 2008-05-16 20:12 frank.sunny 閱讀(2589) | 評(píng)論 (9)編輯 收藏
                 摘要:   DLL(Dynamic Link Library)是一段特殊的代碼,它能夠被外部程序在程序運(yùn)行的時(shí)候調(diào)用。在DLL里面的代碼可以同時(shí)被許多外部程序共享,而且不會(huì)引起手機(jī)內(nèi)存的重復(fù)分配。   DLL根據(jù)接口的類型Symbian系統(tǒng)支持兩種類型的DLL:靜態(tài)接口DLL和多態(tài)接口DLL 靜態(tài)接口DLL在主調(diào)程序啟動(dòng)的時(shí)候被系統(tǒng)自動(dòng)載入到手機(jī)內(nèi)存里面(唯一的例外是如果該DL...  閱讀全文
            posted @ 2008-05-16 20:10 frank.sunny 閱讀(4650) | 評(píng)論 (0)編輯 收藏

            實(shí)現(xiàn)應(yīng)用程序的圖標(biāo)隱藏,2ndS603rd差別很大,相對來說3rd因?yàn)橛幸粋€(gè)[appname]_reg.rss文件,所以顯得很簡單,默認(rèn)的在APP_REGISTRATION_INFO中有一個(gè)屬性值:

            BYTE hidden = KAppNotHidden;

            我們要實(shí)現(xiàn)圖標(biāo)隱藏,只需將其值賦為KAppIsHidden即可。具體示例代碼如下:

            RESOURCE APP_REGISTRATION_INFO

            {

                   app_file="Hello_Hide_app_0xEC12F4E3";

                   localisable_resource_file =  qtn_loc_resource_file_1;

                   localisable_resource_id = R_LOCALISABLE_APP_INFO;

                   hidden = KAppIsHidden;

                   embeddability=KAppNotEmbeddable;

                   newfile=KAppDoesNotSupportNewFile;

            }

             

            2nd版本中顯得略微復(fù)雜些,具體實(shí)現(xiàn)如下(本人尚未測試過):

            I installed the application without name (.app only) or in a folder out of \system\apps\<myapp>\, for example, c:\system\data. In that way the app was not in the list.

            posted @ 2008-05-09 22:48 frank.sunny 閱讀(2005) | 評(píng)論 (0)編輯 收藏

            第二版的開機(jī)自啟動(dòng)比較麻煩,需要涉及到創(chuàng)建mdl文件并且需要在mdl中將另一程序開啟,所以略過。至于第三版的開機(jī)自啟動(dòng)相對來說更加簡單些:

            假設(shè)你的應(yīng)用ID為:ef37946b

            1)data下新建一個(gè)文件, [ef37946b].rss(注意加上[])文件具體代碼如下

            #include <startupitem.rh>

            RESOURCE STARTUP_ITEM_INFO dispatcher

            {

                executable_name = "!:\\sys\\bin\\AutoStart.exe";

                recovery = EStartupItemExPolicyNone;

            }

            此處的AutoStart.exe是你的應(yīng)用程序文件名。

            注:筆者試圖通過修改此處為其他應(yīng)用程序名從而啟動(dòng)指定其他程序,但是沒有成功。

            2)mmp文件中增加以下代碼

            START RESOURCE [ef37946b].rss

            TARGETPATH                 \private\101f875a\import

            HEADER                                  

            END

            確保:

            LANG              SC

            CAPABILITY         ReadUserData

            注意“\private\101f875a\import”不能夠變。

            3)pkg文件中增加以下代碼

            "$(EPOCROOT)epoc32\data\z\private\101f875a\import[ef37946b].rSC"-"!:\private\101f875a\import\[ef37946a].rSC"

             

            如果是采用carbide c++編譯,那么使用上述代碼就可以了。

            如果是使用makesis命令行打包或者使用.Net編譯,那么你需要修改成絕對路徑,路徑名視你的安裝目錄而定。

            例如:

            "C:\Symbian\9.1\S60_3rd_MR\Epoc32\Data\z\private\101f875a\import[ef37946b].rSC"-"!:\private\101f875a\import\[ef37946a].rSC"

            posted @ 2008-05-09 22:48 frank.sunny 閱讀(2783) | 評(píng)論 (15)編輯 收藏

            首先,需要使程序有獲知焦點(diǎn)變化的能力。具體通過在AppUI類中重載CAknAppUi:: HandleForegroundEventL(TBool aForeground )函數(shù)來實(shí)現(xiàn)。

            其次,在獲知焦點(diǎn)變化的同時(shí),改變應(yīng)用程序的焦點(diǎn),通過TApaTask::SendToBackground()TApaTask::BringToForeground()兩個(gè)函數(shù)來實(shí)現(xiàn)。由于這里用到的TApaTask類,需要包含APGTASK.Hapgrfx.lib

            再次,因?yàn)樾枰谡{(diào)用其上函數(shù)時(shí),必須用我們的應(yīng)用程序的窗口組id(window  group  id)初始化(Initialise) TApaTask這個(gè)對象,這個(gè)實(shí)現(xiàn)需要用到,獲取當(dāng)前應(yīng)用程序窗口組id的函數(shù)CEikonEnv::Static()->RootWin().Identifier()。剛好以上函數(shù)又要包含w32std.hw32.lib

            l         具體實(shí)現(xiàn)代碼如下:

            void CHelloUIAppUi::HandleForegroundEventL(TBool  aForeground)

            {

                   if(aForeground)

                   {

                          TApaTask task ( CEikonEnv::Static()->WsSession() );

                          task.SetWgId( CEikonEnv::Static()->RootWin().Identifier() );

                          //Foreground run

                          task.BringToForeground();

                          ActivateLocalViewL(iHelloUIContainerView->Id());

                   }

                   else

                   {

                          TApaTask task ( CEikonEnv::Static()->WsSession() );

                          task.SetWgId( CEikonEnv::Static()->RootWin().Identifier() );

                          //background run

                          task.SendToBackground();

                   }

            }

             

            posted @ 2008-05-09 22:45 frank.sunny 閱讀(3818) | 評(píng)論 (2)編輯 收藏
                 摘要:   如何在CarBidesymbian 3rd版本下調(diào)試控制臺(tái)程序   本人搭建的環(huán)境為ActivePerl-5.8.8.822 + jdk1.6.0_04 + Carbide.C++ V1.2 + S60-SDK-200634-3.1(FP1),至今環(huán)境沒有發(fā)現(xiàn)什么大問題,搭建完調(diào)試控制臺(tái)程序時(shí)發(fā)現(xiàn)問題——程序編譯能通過,但是一旦運(yùn)行(Run)和調(diào)試(Debug)就沒有...  閱讀全文
            posted @ 2008-03-11 19:57 frank.sunny 閱讀(2531) | 評(píng)論 (0)編輯 收藏

             

            今天在單位看計(jì)算機(jī)世界,看到上面一篇文章寫得很不錯(cuò)。摘錄和總結(jié)了幾個(gè)句子,同時(shí)對里面的觀點(diǎn)有達(dá)人想說些什么的話,也給小弟以更好的見識(shí):

             

            第一點(diǎn):“以用戶體驗(yàn)為中心,站在用戶用戶的角度、根據(jù)用戶的理解(而不是程序員的理解)來進(jìn)行軟件開發(fā)。關(guān)于此有一個(gè)基本的原則:就是不能由系統(tǒng)內(nèi)部的交互來主導(dǎo)涉及,而應(yīng)該有系統(tǒng)外部的用戶與系統(tǒng)的交互進(jìn)行指導(dǎo)。

            這個(gè)其實(shí)是軟件開發(fā)的指導(dǎo)原則,軟件行業(yè)本身就是服務(wù)行業(yè),為此對于這個(gè)指導(dǎo)原則,個(gè)人非常贊同。

             

             

            第二點(diǎn):“重用,介于目前廣泛的代碼級(jí)重用,真正的重用已經(jīng)開始了核心競爭力的重用,核心競爭力的重用,包括了對業(yè)務(wù)邏輯重用、業(yè)務(wù)行為重用乃至最關(guān)鍵的知識(shí)的重用。而開源軟件的興起,使得這些基于核心競爭力的高層次重用方式成為可行。”

            這點(diǎn)說實(shí)話,有點(diǎn)深?yuàn)W,現(xiàn)在對我來說代碼級(jí)重用還不是很到家,至于專家所說的核心競爭力重用,知識(shí)重用,我還是不能理解到。 如果有哪位高手能夠指點(diǎn)迷津一下,那自當(dāng)心懷感激。

             

            第三點(diǎn):“軟件質(zhì)量要靠程序員修煉真功夫”

            這個(gè)是毫無疑問的,怎么說,我們做的也是手藝活,修煉是硬道理。

             

            第四點(diǎn)“個(gè)人修煉到團(tuán)隊(duì)修煉的三境界(以修復(fù)一個(gè)bug為例):

            第一境界:不惜努力很有責(zé)任心的,修復(fù)完這個(gè)bug并將其檢查過后完事。

            第二境界:修復(fù)一個(gè)后,思考下在項(xiàng)目中是否還有其它地方有過類似操作,并提醒項(xiàng)目團(tuán)隊(duì)可能范同樣問題的其它同事,由一個(gè)bug,解決一類可能存在的bug

            第三境界:如果同類型bug出現(xiàn)三四次,作為項(xiàng)目負(fù)責(zé)人應(yīng)該考慮:如果是程序員水平問題,那就應(yīng)該對其進(jìn)行必要的培訓(xùn);如果是需求問題,那就需要與客戶(策劃)進(jìn)行確認(rèn)。”

            其實(shí)這個(gè)說得還比較好的,比較形象,我也贊成,說到底還是一個(gè)態(tài)度問題,現(xiàn)在有多少程序員是已經(jīng)達(dá)到第一境界的哦,我從事團(tuán)隊(duì)工作不算長(以前在小公司一直是單干戶),在我覺得,這種人很稀有,更何況后面兩個(gè)境界的了。

             

            第四點(diǎn):“作為一個(gè)團(tuán)隊(duì),要非常注重用戶的滿意度,對團(tuán)隊(duì)的成功有高度的榮譽(yù)和渴望。”

            這一點(diǎn)其實(shí)還是一個(gè)態(tài)度問題,跟第一點(diǎn)有點(diǎn)重復(fù),不過層次更高了些,因?yàn)榈谝稽c(diǎn)可以說是自上而下的君主立憲,這一點(diǎn)是自下而上的,團(tuán)隊(duì)內(nèi)人人都能做到的道德規(guī)范。

             

            posted @ 2008-01-17 08:45 frank.sunny 閱讀(1550) | 評(píng)論 (2)編輯 收藏

             

            C中如何調(diào)用C++函數(shù)?

             

            前陣子被問及一個(gè)在C中如何調(diào)用C++函數(shù)的問題,當(dāng)時(shí)簡單回答是將函數(shù)extern "C"聲明,當(dāng)被問及如何將類內(nèi)成員函數(shù)聲明時(shí),一時(shí)語塞,后來網(wǎng)上查了下,網(wǎng)上有一翻譯C++之父的文章可以作為解答,遂拿來Mark一下。

             

            C++ 函數(shù)聲明為``extern "C"''(在你的 C++ 代碼里做這個(gè)聲明),然后調(diào)用它(在你的 C 或者 C++ 代碼里調(diào)用)。例如:

            // C++ code:

            extern "C" void f(int);

            void f(int i)

            {

                 // ...

            }

             

            然后,你可以這樣使用 f()

            /* C code: */

            void f(int);

            void cc(int i)

            {

                f(i);

               /* ... */

                }

             

            當(dāng)然,這招只適用于非成員函數(shù)。如果你想要在 C 里調(diào)用成員函數(shù)(包括虛函數(shù)),則需要提供一個(gè)簡單的包裝(wrapper)。例如:

            // C++ code:

            class C

            {

                   // ...

                   virtual double f(int);

            };

             

            extern "C" double call_C_f(C* p, int i) // wrapper function

            {

                   return p->f(i);

            }

             

            然后,你就可以這樣調(diào)用 C::f()

            /* C code: */

            double call_C_f(struct C* p, int i);

             

            void ccc(struct C* p, int i)

            {

                   double d = call_C_f(p,i);

                   /* ... */

            }

             

            如果你想在 C 里調(diào)用重載函數(shù),則必須提供不同名字的包裝,這樣才能被 C 代碼調(diào)用。例如

            // C++ code:

            void f(int);

            void f(double);

             

            extern "C" void f_i(int i) { f(i); }

            extern "C" void f_d(double d) { f(d); }

             

            然后,你可以這樣使用每個(gè)重載的 f()

            /* C code: */

            void f_i(int);

            void f_d(double);

             

            void cccc(int i,double d)

            {

                   f_i(i);

                   f_d(d);

                   /* ... */

            }

            注意,這些技巧也適用于在 C 里調(diào)用 C++ 類庫,即使你不能(或者不想)修改 C++ 頭文件。

             該翻譯的文檔Bjarne Stroustrup的原文鏈接地址是

            http://www.research.att.com/~bs/bs_faq2.html#callCpp

            本來貼出來以后受到很多C/C++朋友的關(guān)注,非常榮幸,在“夢在天涯”的提醒下,本人后來又完成了一個(gè)Demo工程,發(fā)現(xiàn)和BJ說的有點(diǎn)出入,希望有高手指點(diǎn),Demo工程下載鏈接如下:http://m.shnenglu.com/Files/franksunny/cCallCppDemo.rar

             

             

            posted @ 2007-11-29 20:38 frank.sunny 閱讀(60709) | 評(píng)論 (21)編輯 收藏
                 摘要:   描述符<下>轉(zhuǎn)換   業(yè)余有時(shí)候把一個(gè)事情當(dāng)作任務(wù)來做的時(shí)候,往往會(huì)很受限制,就象這篇文檔,上次寫了個(gè)上篇,關(guān)于描述符的下篇,自己就遲遲沒有勇氣和時(shí)間寫完,好幾次都想靜下心來好好完成它,但是都未能如愿,可如果不寫顯然我也不好意思寫其它的一些東西,閑話提到這里,花了幾天業(yè)余時(shí)間總算是完成了,該文質(zhì)量不足之處還望讀者您見諒。   通過前面關(guān)于描述...  閱讀全文
            posted @ 2007-11-28 22:51 frank.sunny 閱讀(4966) | 評(píng)論 (15)編輯 收藏
                 摘要:   描述符Descriptors <上>概念和使用   接觸Symbian已經(jīng)一個(gè)半月多了,自從上個(gè)月熟悉了框架之后,一直都不敢再寫什么東西了,因?yàn)闆]有經(jīng)歷過代碼怎么可能寫得出東西呢?起筆猶豫了很久,打算涉足Symbian與標(biāo)準(zhǔn)C++的一個(gè)不同點(diǎn)——描述符。希望自己能夠借這個(gè)機(jī)會(huì)搞清楚描述符這個(gè)東西。   一、總介 由于手機(jī)系統(tǒng)的資源區(qū)別于P...  閱讀全文
            posted @ 2007-10-19 17:23 frank.sunny 閱讀(3626) | 評(píng)論 (6)編輯 收藏
            僅列出標(biāo)題
            共7頁: 1 2 3 4 5 6 7 

            常用鏈接

            留言簿(13)

            隨筆分類

            個(gè)人其它博客

            基礎(chǔ)知識(shí)鏈接

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久精品国产精品亚洲| 亚洲中文字幕久久精品无码喷水| 日韩精品久久无码人妻中文字幕| 亚洲综合伊人久久大杳蕉| 97久久精品国产精品青草| 久久国产精品一区| 久久久老熟女一区二区三区| 久久被窝电影亚洲爽爽爽| 婷婷久久综合九色综合九七| 午夜久久久久久禁播电影| 久久国产成人午夜aⅴ影院| 中文字幕久久久久人妻| 久久精品中文字幕一区| AAA级久久久精品无码片| 2019久久久高清456| 亚洲国产二区三区久久| 久久综合给合久久狠狠狠97色| 久久久久97国产精华液好用吗| 久久久国产精品亚洲一区| 久久国产精品无| 久久青青草原精品国产软件| 久久精品免费观看| 国产精品一久久香蕉产线看| 99久久国产精品免费一区二区 | 久久久久久久91精品免费观看| 久久久久久毛片免费播放| 伊人 久久 精品| 精品久久久久久久久久中文字幕| 精品国产91久久久久久久| 成人午夜精品无码区久久| 久久狠狠爱亚洲综合影院 | 91麻豆国产精品91久久久| 久久天天躁狠狠躁夜夜av浪潮 | 一本久久a久久精品vr综合| 国产精品中文久久久久久久| 亚洲伊人久久综合中文成人网| 久久人人超碰精品CAOPOREN | 午夜人妻久久久久久久久| 亚洲精品无码久久久久sm| 成人午夜精品无码区久久| 欧美噜噜久久久XXX|