??xml version="1.0" encoding="utf-8" standalone="yes"?>精品综合久久久久久97,国产精品久久久久久影院,久久亚洲春色中文字幕久久久http://www.shnenglu.com/AutomateProgram/archive/2010/06/09/117447.html漂漂漂漂Wed, 09 Jun 2010 00:55:00 GMThttp://www.shnenglu.com/AutomateProgram/archive/2010/06/09/117447.htmlhttp://www.shnenglu.com/AutomateProgram/comments/117447.htmlhttp://www.shnenglu.com/AutomateProgram/archive/2010/06/09/117447.html#Feedback0http://www.shnenglu.com/AutomateProgram/comments/commentRss/117447.htmlhttp://www.shnenglu.com/AutomateProgram/services/trackbacks/117447.html在待机情况下按:
一、米?6井,是查手机的序列号Q?/font>
二、米?000井,查看手机的版本、出厂日期和手机型号Q?/font>
三、米?2702689井,查看手机的总计时器Q要买全新手机的可以用q个Q如果没有用q的显C?00000Q?0 Q?/font>
四、米?820井,查看蓝牙蕊片地址Q?/font>

五、米?780井、也是恢复原厂设|,《此不同于Y格式机,恢复后不会将C盘文件清I,手机l常L、反应慢可以用q个?
六、硬格式化手机,先将手机xQ然后按Q拨号键、米键?号键Q三个键同时按住不放Q然后开机,直到屏幕昄选择地区再放Q硬格式会将C盘内所有的东西清掉Q手机反应更快Q?/font>

七、诺Z的初始化密码为:12345.
八、如果你的手偷了Q可以打诺基亚公司的电话Q将你的手机序列hl他Q公怼帮你锁闭你的手机Q这样小偷偷C的手Z׃点用处也没有了,成了废品Q这些功能只有诺Z的手机才可以用!
九、米?370925538井、可以电子钱包密码初始化,q时重设密码可以了Q?/font>
十、米3370井、开启EFR Q增强型全速率~码功能Q井3370井、则关闭Q?/font>
十一、米4720井,开启HR增强型半速率~码功能、米4720?则关闭!
十二、米c?1c?99999井,拨号Q设|呼叫{UȝP即限ӞQ井002井,解除Q?/font>  



漂漂 2010-06-09 08:55 发表评论
]]>
symbian昄囄http://www.shnenglu.com/AutomateProgram/archive/2010/04/01/111244.html漂漂漂漂Thu, 01 Apr 2010 01:21:00 GMThttp://www.shnenglu.com/AutomateProgram/archive/2010/04/01/111244.htmlhttp://www.shnenglu.com/AutomateProgram/comments/111244.htmlhttp://www.shnenglu.com/AutomateProgram/archive/2010/04/01/111244.html#Feedback0http://www.shnenglu.com/AutomateProgram/comments/commentRss/111244.htmlhttp://www.shnenglu.com/AutomateProgram/services/trackbacks/111244.html
拯hellobm.bmp文g到group目录下,
.mmp中在sources中添加group下hellobm.bmp
重新生成工程可以在group文g夹下看到include目录下可以看到Myhelloworldbasic.mbg文gQ有枚D
enum TMbmMyhelloworldbasic
 {
 EMbmMyhelloworldbasicHellobm
 };

 //l制囄
    _LIT (KImagesFilename,"\\resource\\Apps\\Myhelloworldbasic.mbm");
    TFindFile bitFile(CCoeEnv::Static()->FsSession());
    CFbsBitmap*   iBitmap   =   new   (ELeave)CFbsBitmap;
 if(KErrNone == bitFile.FindByDir(KImagesFilename, KNullDesC))
  {
 TInt err = iBitmap->Load(bitFile.File(),0);
  }
    if(iBitmap)
     if(iBitmap->Handle())
     gc.BitBlt(TPoint(60,100),iBitmap);
    delete iBitmap;

d资源
?pkg中添?br>"..\..\..\..\epoc32\data\z\resource\apps\Myhelloworldbasic.mbm" -"!:\resource\apps\Myhelloworldbasic.mbm"
q样q制图片了?br>

漂漂 2010-04-01 09:21 发表评论
]]>
symbian昄中文http://www.shnenglu.com/AutomateProgram/archive/2010/03/31/111166.html漂漂漂漂Wed, 31 Mar 2010 07:11:00 GMThttp://www.shnenglu.com/AutomateProgram/archive/2010/03/31/111166.htmlhttp://www.shnenglu.com/AutomateProgram/comments/111166.htmlhttp://www.shnenglu.com/AutomateProgram/archive/2010/03/31/111166.html#Feedback0http://www.shnenglu.com/AutomateProgram/comments/commentRss/111166.htmlhttp://www.shnenglu.com/AutomateProgram/services/trackbacks/111166.htmlS60_Platform_Chinese_Display_Example_v2_1_en.zip 
头文Ӟ#include <charconv.h>
库:charconv.lib
CCnvCharacterSetConverter* converter = CCnvCharacterSetConverter::NewLC();
    
TBool chineseLanguageSupported = EFalse;

if( converter->PrepareToConvertToOrFromL( KCharacterSetIdentifierGbk,
iEikonEnv->FsSession()) == CCnvCharacterSetConverter::EAvailable )
{
chineseLanguageSupported = ETrue;
}
else if ( converter->PrepareToConvertToOrFromL( KCharacterSetIdentifierGb2312,
iEikonEnv->FsSession() ) == CCnvCharacterSetConverter::EAvailable )
{
chineseLanguageSupported = ETrue;
}
HBufC* iInfoText;
// The following string is "Nokia" in simplified Chinese
TText8  *str = (TText8*)"q是一个最好的时代Q?;
    TInt state=CCnvCharacterSetConverter::KStateDefault;

TPtrC8 source( str );
iInfoText = HBufC::NewL( source.Length() );
TPtr16 ptr = iInfoText->Des();
    
if( chineseLanguageSupported )
{
TRAP_IGNORE( converter->ConvertToUnicode( ptr, source, state ) )
}

    gc.UseFont(iFont);
    gc.DrawText(iInfoText->Des(), rect, Rect().Height()/2, CGraphicsContext::ECenter );
    gc.DiscardFont();
    
CleanupStack::PopAndDestroy();  // converter
delete iInfoText;


漂漂 2010-03-31 15:11 发表评论
]]>
symbian基本cLȝhttp://www.shnenglu.com/AutomateProgram/archive/2010/03/29/110840.html漂漂漂漂Mon, 29 Mar 2010 05:23:00 GMThttp://www.shnenglu.com/AutomateProgram/archive/2010/03/29/110840.htmlhttp://www.shnenglu.com/AutomateProgram/comments/110840.htmlhttp://www.shnenglu.com/AutomateProgram/archive/2010/03/29/110840.html#Feedback0http://www.shnenglu.com/AutomateProgram/comments/commentRss/110840.htmlhttp://www.shnenglu.com/AutomateProgram/services/trackbacks/110840.html原文地址Q?a >http://www.cnblogs.com/jason-jiang/archive/2006/11/03/549244.html
symbian基本cLȝ

cLȝQ?br>四大天王QCaknApplicationQCeikDocumentQCAknAppUiQCAknView

void CAknAppUi::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )

在显Cmenu pane之前调用Q主要是用来初始化菜单显C的具体目?br>
aResourceId 是资源的具体IDQ如R_SMS_MENU?br>
aMenuPane 通过调用aMenuPane->SetItemDimmedQ菜单项目资源IDQEFalseQ;来显C或隐藏该菜单选项。注意:Etrue为隐藏?br>
1、话框类QCEikDialog   QOK/CANCELQ?br>主要成员函数有:

void PreLayoutDynInitL();//处理在对话框出现之前的初始化动作

TBool OkToExitL( TInt aButtonId );//对OK按的处理

Void HandleControlStateChangL(Tint aControlId);//监听对话框上控g改动Q有点类gAppuicȝvoid CAknAppUi::HandleCommandL(TInt aCommand)?br>
//构造方式:

    CMmssSendDialog* iSendDialog = new ( ELeave ) CMmssSendDialog;

       iSendDialog->SetMopParent( this );

    iSendDialog->ExecuteLD( R_MMSSEND_DIALOG );

//-------------------------------定义一个对话框资源---------------------------



RESOURCE DIALOG r_mmssend_dialog

    {

    flags =   EEikDialogFlagNoDrag |    // 无法拖曳

                       EEikDialogFlagNoTitleBar |  //无标题栏

                       EEikDialogFlagFillAppClientRect | //应用程序客户区填满

                       EEikDialogFlagCbaButtons |  //使用CBA按钮

EEikDialogFlagModeless;   //不接受按钮事?br>
//以上可以参见SDK  QDeveloper Library ? API Reference ? C++ API reference ? UIKLAFGT

    buttons = R_AVKON_SOFTKEYS_OPTIONS_EXIT;

    form = r_mmssend_form;

    }



// ---------------------------------------------------------

//默认的单行显C模?br>
  
// ---------------------------------------------------------

//可以讄为double行显C?br>

RESOURCE FORM r_mmssend_form

    {

    flags = EEikFormEditModeOnly |

EEikFormUseDoubleSpacedFormat;

//Specify a style of form optionally. The default setting is single line display.
//1、EEikFormUseDoubleSpacedFormat : Double line display.
//2、EEikFormHideEmptyFields : To make empty data fields Invisible.
//3、EEikFormShowBitmaps : To display a bitmap on a label.
//4、EEikFormEditModeOnly : To display the form in edit mode only.

    items =

        {

        DLG_LINE

            {

type = EEikCtEdwin;    //是一个编辑文本框 Editor window

//实际上这个是枚DcdQ可参看SDKQ?br>
//Developer Library ? API Reference ? C++ API reference ? UIKLAFGT ? UIKLAFGT Resource Constants ? TEikStockControls

    prompt = qtn_mmssend_recipient_prompt;// q个控g的label昄的字W串

            id = EMmsRecipientEditor;

            control = EDWIN

                {

                flags = EEikEdwinNoHorizScrolling | EEikEdwinResizable;

                width = qtn_mmssend_recipient_width;

                maxlength = qtn_mmssend_recipient_maxlenght;

                default_input_mode = EAknEditorNumericInputMode;//数字输入模式

                };
},


           DLG_LINE

            {

            type = EEikCtEdwin;

               prompt = qtn_mmssend_subject_prompt;

            id = EMmsSubjectEditor;

            control = EDWIN

                {

                flags = EEikEdwinNoHorizScrolling | EEikEdwinResizable;

                width = qtn_mmssend_subject_width;

                maxlength = qtn_mmssend_subject_maxlenght;

                default_input_mode = EAknEditorTextInputMode;//文本输入模式

                };
            }
           };

    }

2、周期类Q?br>1、Cperiodic
==================================================================

CPeriodic* iPeriodicTimer;

iPeriodicTimer = CPeriodic::NewL( CActive::EPriorityStandard );//q条语句一般在ConstructL()?br>
void CGraphicsAppView::StartTimer()//开始启动时?br>
    {

    if ( !iPeriodicTimer->IsActive() )

        {iPeriodicTimer->Start( 1, 1,

            TCallBack( CGraphicsAppView::Period, this ) );//TcallBack是一个方法回调函敎ͼ从用来看,他只能回调类中的静态方法?br>
        }

    }

TInt CGraphicsAppView::Period( TAny* aPtr )//周期启动函数Q注意,q是个静态函敎ͼ但static只在头文件中才做了申明?br>
    {

    ( static_cast<CGraphicsAppView*>( aPtr ) )->DoPeriodTask();

    return ETrue;

    }

void CGraphicsAppView::DoPeriodTask()//周期真正在做的事?br>
    {

    // Update the screen

    CWindowGc& gc = SystemGc();

    gc.Activate( *DrawableWindow() );//如果要求清屏操作。增加gc.Clear();

    UpdateDisplay();///////////////////q个函数是周期需要实现的东西

    gc.Deactivate();

    }

void CGraphicsAppView::StopTiem()//停止旉

    {

    if ( iPeriodicTimer->IsActive() )

        {

        iPeriodicTimer->Cancel();

        }

    }

2、Rtimer
        RTimer timer;

        TRequestStatus timerStatus;  // ... its associated request status

   timer.CreateLocal();         // Always created for this thread.

for (TInt i=0; i<10; i++)

        {    // issue and wait for single request

        timer.After(timerStatus,1000000);  // 讑֮旉h?U?br>
        User::WaitForRequest(timerStatus); // {待q个h

             // display the tick count

        _LIT(KFormat3,"Tick %d\n");

        console->Printf(KFormat3, i);

        }

3、Ttime
  TTime time; // time in microseconds since 0AD nominal Gregorian

   _LIT(KTxt2,"The time now is, ");

   console->Printf(KTxt2);

   time.HomeTime(); //讄旉为当前系l时?br>
   showTime(time);//昄当前旉

//----------------以下代码是h为给旉?0U?-------------

TTimeIntervalSeconds timeIntervalSeconds(10);

   time += timeIntervalSeconds;

   showTime(time); // print the time the request should complete

//---------------------------------------------------------

timer.At(timerStatus,time); //讑֮旉h?0U?br>
User::WaitForRequest(timerStatus); //{待q个h

        // say it's over, and set and print the time again

   _LIT(KTxt4,"Your 10 seconds are up\nThe time now is, ");

   console->Printf(KTxt4);

   time.HomeTime(); // set time to now

   showTime(time); // print the time

        // close timer

   timer.Close(); // close timer

              

3、字W串c:
TDesC是所有字W类的祖?br>

标准C语言
Symbian OS

让一个字W串q入2q制代码
Static char hellorom[]=”hello”
_LIT(khellorom,”hello”)

在栈中获得字W串的指?br>Const char* helloptr=hellorom
TPtrC helloptr=khellorom

获得在栈中字W串的指?br>Char hellostack[sizeof(hellorom)];

Strcpy(hellostack,hellorom);
TBufC<5> hellostack=khellorom;

获得在堆中字W串的指?br>Char* helloheap=

(char *)malloc(sizeof(hellorom));

strcpy(helloheap,hellorom);
HBufC* helloheap=

Khellorom.AllocLC();


a)TPtrC相当于不变的字符串常?

b)TPtr相当与Stringcd。Tbuf相当于char[]。前者与后者的唯一区别是,后者需要指定分配的栈空间大?br>
C)HBufC* 与char*cM。分配的是堆上的I间?br>
HBufC* textResource;

//两种字符串附值方?br>
textResource = StringLoader::LoadLC( R_HEWP_TIME_FORMAT_ERROR );

textResource =iEikonEnv->AllocReadResourceL(R_EXAMPLE_TEXT_HELLO);

TBuf<32> timeAsText;

timeAsText = *textResource;

/* 数据cd转换*/


TBuf  转换?TPtrC16
    TBuf<32> tText(_L("2004/11/05 05:44:00"));
    TPtrC16 tPtrSecond=tText.Mid(17,2);

TPtrC16 转换?TBufC16
    TPtrC16 tPtrSecond=tText.Mid(17,2);
    TBufC16<10> bufcs(tPtrSecond);

TBufC16 转换?nbsp; TPtr16
    TBufC16<10> bufcs(tPtrSecond);
    TPtr16 f=bufcs.Des();

TPtr16 转换?TBuf
    TBuf<10> bufSecond;
    bufSecond.Copy(f);

TBuf 转换?TPtr16
    TBuf<10> bufSecond(_L("abc"));
    TPtr16 f;
    f.Copy(bufSecond);

TBuf 转换?TInt
    TInt aSecond;
    TLex iLexS(bufSecond);
    iLexS.Val(aSecond);

TInt 转换?TBuf
    TBuf<32> tbuf;
    TInt i=200;
    tbuf.Num(i);

1.串{换成数字
   TBuf16<20> buf(_L( "123" ) );
    TLex lex( buf );
    TInt iNum;
    lex.Val( iNum );
2.数字转换成串
   TBuf16<20> buf;
   TInt iNum = 20;
   buf.Format( _L( "%d" ) , iNum  );
3.symbian串{换成char?br>    char* p = NULL;
    TBuf8<20> buf( _L( "aaaaa" ) );
    p = (char *)buf.Ptr();

4.UTF-8转换成UNICODE
    CnvUtfConverter::ConvertToUnicodeFromUtf8( iBuf16 , iBuf8 );
5.UNICODE转换成UTF-8
    CnvUtfConverter::ConvertFromUnicodeToUtf8( iBuf8 , iBuf16 );


6.char串{换成symbian?br>    char* cc = "aaaa";
    TPtrC8 a;
    a.Set( (const TUint8*)cc , strlen(cc) );

7、将TPtrc8与TPtrc16之间转化

// Get a iBuf8 from a iBuf16 (data are not modified)
TPtrC8 ptr8(reinterpret_cast<const TUint8*>(iBuf16.Ptr()),(iBuf16.Size()*2));
iBuf8=ptr8;

// Get a iBuf16 from a iBuf8 (data are not modified)
TPtrC16 ptr16(reinterpret_cast<const TUint16*>(iBuf8.Ptr()),(iBuf8.Size()/2));
iBuf16=ptr16;


The second one takes each character and convert it to the other format. The 16-bit to 8-bit conversion may not always succeed in this case:

Code:

// Get a iBuf8 from a iBuf16 (data are modified)
CnvUtfConverter::ConvertFromUnicodeToUtf8(iBuf8,iBuf16);

// Get a iBuf16 from a iBuf8 (data are modified)
CnvUtfConverter::ConvertToUnicodeFromUtf8(iBuf16,iBuf8);


This second method requires to include the utf.h header and to link against charconv.lib.

/*memset   memcpy   strcpy */

memset主要应用是初始化某个内存I间。用来对一D内存空间全部设|ؓ某个字符?br>memcpy是用于COPY源空间的数据到目的空间中,用来做内存拷贝可以拿它拷贝Q何数据类型的对象?br>strcpy只能拯字符串了Q它遇到'\0'q束拷贝?br>


strcpy
原型Qextern char *strcpy(char *dest,char *src);
用法Q?include <string.h>
功能Q把src所指由NULLl束的字W串复制到dest所指的数组中?br>说明Qsrc和dest所指内存区域不可以重叠且dest必须有够的I间来容Usrc的字W串?br>       q回指向dest的指针?br>      
memcpy
原型Qextern void *memcpy(void *dest, void *src, unsigned int count);
用法Q?include <string.h>
功能Q由src所指内存区域复制count个字节到dest所指内存区域?br>说明Qsrc和dest所指内存区域不能重叠,函数q回指向dest的指针?br>
memset
原型Qextern void *memset(void *buffer, int c, int count);
用法Q?include <string.h>
功能Q把buffer所指内存区域的前count个字节设|成字符c?br>说明Q返回指向buffer的指针?br>







4、文件类和流操作
Location: s32file.h

文g模拟路径在C:\Symbian\8.0a\epoc32\wins下面。有C、D两个分区?br>
RFs fs;
User::LeaveIfError(fs.Connect());
RFile file
User::LeaveIfError(file.Open(fs, _L("C:\\file.foo"), EFileWrite));
TBuf8<256> buf;
file.Read(buf, 256);
file.Seek(ESeekStart, 911);
file.Write(_L8("Some thing you wanna write..."));
file.Close();
1)      与文件服务器建立通信Q?br>
RFs fsSession;

TInt fsret = fsSession.Connect(); // start a file session

       if (fsret != KErrNone)

              {console->Printf(KTxtConnectFailed,fsret);

              User::Leave(fsret);

              }

  2Q确定文件\径存?br>
fsSession.MkDirAll(KFullNameOfFileStore); // make sure directory exists

      



  3Q徏立文件存?br>
TParse    filestorename;// The class uses the full filename structure supported by Symbian

       fsSession.Parse(aName,filestorename);

/*------------------------------------------------------------------------------------------------

TDesC& aName。可以通过以下方式laNAME赋|
    _LIT(aName,"C:\\epoc32ex\\data\\SimpleClassToSimpleStream.dat");

----------------------------------------------------------------------------------------------*/

                            // construct file store object - the file to contain the

                            // the store replaces any existing file of the same name.

       CFileStore*     //如果EFileRead出流

store = CDirectFileStore::ReplaceLC(fsSession,filestorename.FullName(),EFileWrite);

store->SetTypeL(KDirectFileStoreLayoutUid); // 讑֮存储U类



4Q将外部数据写入:Q(记忆方式Q?gt;>指向是数据向Q?/假设QTSimple anXxx;

RStoreWriteStream outstream;

       TStreamId id = outstream.CreateLC(*store);

//----------------------------标量写入数据流------------------

outstream<< anXxx;

    或?aStream.WriteInt8L(anXxx);

    实际上这里用了的扩展化:Q当输出不是普通的元数据时Q用这个扩展化Q这是一个虚函数的重?br>
void TSimple::ExternalizeL(RWriteStream& aStream) const

       {

       aStream << iTheEnum;

       aStream << iBuffer;

       aStream.WriteInt32L(iIntValue);

       aStream.WriteUint32L(iUintValue);

       aStream.WriteReal64L(iRealValue);

       }  

//------------------------------------------------------------------------------------------------

     // 以下是将改动提交到文g服务器?br>
       outstream.CommitL();

5Q将读到外部数据:

       RStoreReadStream instream;

store->SetRootL(id);//可以上面的已经存在的流作ؓ的栏V好处是不必再创建流ID。实际上也就节省了内存?br>
// Commit changes to the store

       store->CommitL();

// Construct and open the input stream object. We want to access the root stream from the store in this example.

       instream.OpenLC(*store,store->Root());

TSimple thesimple;

       instream >> thesimple;//写入cd象数据?br>
    //---------------------------------------------------------------------

void TSimple::InternalizeL(RReadStream& aStream)

       {

       aStream >> iTheEnum;

       aStream >> iBuffer;

      iIntValue  = aStream.ReadInt32L();

       iUintValue = aStream.ReadUint32L();

       iRealValue = aStream.ReadReal64L();

       }  

    //------------------------------输出到其他数据元或cd象中----------------------------

     anXxx = TXxx(aStream.ReadInt8L());

  

6Q关闭文件服务通信

fsSession.Close()

    

5. zd调度?
׃使用多线E来处理异步h比较消耗系l资源,所以Symbian 使用了活动对象(Active ObjectQ来解决异步h的问题?br>         zd规划器(active schedulerQ用于处理由zd对象提出的异步请求。它活动对象提出的异步hQƈ安排zd对象的请求完成事件的执行序。活动规划器仅用一个事件处理线E来规划各个zd对象提出的事件请求,所以它要比多线E实现异步请求占用更的资源?br>
1?nbsp;  首先应该创徏一个活动规划器对象Qƈ把它安装到当前线E?br>
       CActiveScheduler* scheduler = new(ELeave) CActiveScheduler();//创徏一个活动规划器
   CleanupStack::PushL(scheduler);
   CActiveScheduler::Install(scheduler);// 安装zd规划器?br>   TRAPD(error,doInstanceL());   //具体安排的函数处理?br>
在具体的安排函数中一定要启动q个规划?br>
CActiveScheduler::Start();//q句话告诉活动规划器该等待对象的状态的改变

2?把自己加入活动规划器Q一般这是一个类。可以在cȝ构造函Cx下面代码?br>                      CActiveScheduler::Add(this);

     //该类必须有一个承来自public CActive, public MmsvSessionObserver

//在构造函数时Q也可以宣布优先U别QTclassA::classA()  : CActive(0)    

3、返回改变事实:              

SetActive();  / / CActivecd象提交异步请求?br>
//q个h说明对象的改变完成。就会触发CActive::RunL()

      4、这里的CActiveScheduler只管理了一个CActive对象,是timeCount,可以用类似的Ҏ实现多个CActive,q且都加入CActiveScheduler,CActiveScheduler会{待所有加入它的CActive的状态的改变,其中有一个的状态改变就会去执行对应的活动对象的处理函数,当状态同时发生的时?会通过对象的优先来决定先调用谁的RunL函数.CActiveScheduler也是非抢占式?当一个RunL函数q没有执行完的时?如果另一个CActive的状态改?会等待RunL执行完以后再执行另一个CActive的处理函?



6、线E:
1?nbsp; 创徏一个等待的U程Q?br>
     TInt res=KErrNone;

     // create server - if one of this name does not already exist

     TFindServer findCountServer(KCountServerName);

     TFullName name;

     if (findCountServer.Next(name)!=KErrNone) // we don't exist already

         {

RThread thread;

         RSemaphore semaphore;

         semaphore.CreateLocal(0); //创徏一个信号量Q等待线E的正常l束

         res=thread.Create(KCountServerName,   // create new server thread

              CCountServServer::ThreadFunction, // U程启动的主函数

              KDefaultStackSize,

              KDefaultHeapSize,

              KDefaultHeapSize,

              &semaphore // 最后是d数的需要的参数passed as TAny* argument to thread function

              );

         if (res==KErrNone) // thread created ok - now start it going

              {

              thread.SetPriority(EPriorityNormal);

              thread.Resume(); // start it going

              semaphore.Wait(); // wait until it's initialized

              thread.Close(); // we're no longer interested in the other thread

              }

         else // thread not created ok

              {

              thread.Close(); // therefore we've no further interest in it

              }

         semaphore.Close();

         }

漂漂 2010-03-29 13:23 发表评论
]]>
symbian中活动对象的一些简单的使用 ?Symbianq_UL之——活动规划器CActiveScheduler的灵zd?http://www.shnenglu.com/AutomateProgram/archive/2010/03/24/110460.html漂漂漂漂Wed, 24 Mar 2010 09:02:00 GMThttp://www.shnenglu.com/AutomateProgram/archive/2010/03/24/110460.htmlhttp://www.shnenglu.com/AutomateProgram/comments/110460.htmlhttp://www.shnenglu.com/AutomateProgram/archive/2010/03/24/110460.html#Feedback0http://www.shnenglu.com/AutomateProgram/comments/commentRss/110460.htmlhttp://www.shnenglu.com/AutomateProgram/services/trackbacks/110460.html原文地址Qhttp://blog.csdn.net/suyouxin/archive/2005/01/06/242759.aspx
 symbian中活动服务对象的一些简单的使用

对symbain的学习已l又几个月了,今天来写写自q一些活动服务对象用方?

symbian官方推荐使用zd服务对象(CActive)来代替多U程的?我想q个道理是很明了?在手L内存设备里,q行多线E的E序是非常耗资源的,Z节约资源,symbian提供了一个活动服务对象的框架,允许把程序里q发执行对象(其实不是q发,不过宏观上看来是)攑֜一个线E里面执?q些q发工作的对象就通过zd规划?ActiveScheduler)来进行管?

关于q两个东西的介绍,|上有一大堆的文?我就不在q里废话?如何使用?q里我先举一个简单的计数器的例子.我选择写一个exe的程?也就是说E序是以E32Main为入口的.
    
GLDEF_C TInt E32Main() 
{
     CTrapCleanup* cleanup=CTrapCleanup::New();
     TRAPD(error,callInstanceL()); 
     if (error != KErrNone){
         printf("get error %d\r\n", error);
     }
     delete cleanup; 
     return 0; 
}

以上的内Ҏ每一个exe文g都应该做?CTrapCleanup* cleanup=CTrapCleanup::New()建立一个清除堆?以便E序在异帔R出的时候把清除堆栈里面的资源都释放?当然你也可以加上堆检宏,q里我就不多说了.TRAPD是symbian里面l常使用的宏,功能cM于try,W一个参数是让定义一个错误返回值变量的名字, 后面是可能有异常的你写的函?当这个函数异常时,E序不会crash, 你可以得到异常的原因.可以参考nokia论坛上的一些关于这些用的文.

接下来是vcallInstanceL函数,在这个函数里面我来徏立ActiveScheduler.

LOCAL_C void callInstanceL() 
{
     CActiveScheduler* scheduler = new(ELeave) CActiveScheduler();
     CleanupStack::PushL(scheduler);
     CActiveScheduler::Install(scheduler);
     TRAPD(error,doInstanceL());
     if(error) {
          printf("error code=%d\r\n",error);
     }
     else {
          printf("OK!\r\n[press any key]");
     }
     CleanupStack::PopAndDestroy(scheduler);
}

q段E序很简单就是创Z个活动规划器,q压入清除栈,然后安装zd规划?q样可以用?再执行真正的实例函数,最后出栈销?doinstanceL我们攑ֈ最后来?现在来构造我们的zd计数器对?

class TimeCount : public CActive
    {
public :
     static TimeCount* NewLC(); // 构造函?/div>
     ~TimeCount();
     void StartL();              // 计数开?/div>
     void ConstructL(); 
     void RunL();               // 延时事g到达以后的处理函?/div>
     void DoCancel();        // 取消h提交
     void setDelayTime(int delayTime);
private:
     TimeCount();
     RTimer iTimer;            // 定时?/div>
     int iTimeCount;            // 计数?/div>
     int mTime;                   // 计数间隔旉 单位U?/div>
};

TimeCount::TimeCount() 
 : CActive(0)                    // q里可以讄zd对象的优先
{
     // 把自己加入活动规划器
     CActiveScheduler::Add(this);
}

TimeCount* TimeCount::NewLC()
{
     TimeCount* result = new (ELeave) TimeCount();
     CleanupStack::PushL( result );
     result->ConstructL();
     return result;
}

void TimeCount::DoCancel(void)
{
     iTimer.Cancel();
}

void TimeCount::setDelayTime(int mTime)
{
     DelayTime = mTime;
}

TimeCount::~TimeCount()
{
     Cancel();
     iTimer.Close();
}

void TimeCount::StartL()
{
     // 讑֮定时器状态ؓ每隔mTimeU钟状态完成一?/div>
     iTimer.After(iStatus, 10000 * 100 * mTime);
     // 提交异步h
     SetActive();
}

void TimeCount::ConstructL()
{
     // 初始化计数器和定时器
     iTimeCount = 0;
     User::LeaveIfError(iTimer.CreateLocal());
}

void TimeCount::RunL()
{
     // 计数?1以后l箋提交延时h事g
     printf("The Count is ->>%d", iTimeCount++);
     StartL();
}

每一个活动服务对象都有一个iStatus来标识当前对象的状?在这里我们把iStatus讑֮为iTimer.After(iStatus, 10000 * 100 * mTime);也就是定时器定时mTimeU钟以后iStatus发生改变,q个时候活动规划器会收到这个状态的改变,从而调用相应活动对象的处理函数,也就是RunL函数.在RunL函数里面q行计数和输?然后调用startL重新讄定时器和对象状?再提交给zd规划?q样mTimeU钟以后zd规划器会再次调用RunL函数.一直这样重?q样pC计数器的效果.

最后我们来写doinstanceL函数
LOCAL_C void doInstanceL()
{       
     TimeCount* timeCount = TimeCount::NewLC();
     // 每隔一U钟打印一?/div>
     TimeCount->setDelayTime(1);
     TimeCount->StartL();
 
     CActiveScheduler::Start();
 
     CleanupStack::PopAndDestroy(1); 
}

创徏好对象以?加上CActiveScheduler::Start()E序开始运行了,q句话告诉活动规划器该等待对象的状态的改变?在这里就是timeCount的iStatus的改?{iStatus改变q调用了RunL以后,l箋{待iStstus的改?q样我们使用zd对象的计数器p够通过消息驱动q行h?

q里的CActiveScheduler只管理了一个CActive对象,是timeCount,可以用类似的Ҏ实现多个CActive,q且都加入CActiveScheduler,CActiveScheduler会{待所有加入它的CActive的状态的改变,其中有一个的状态改变就会去执行对应的活动对象的处理函数,当状态同时发生的时?会通过对象的优先来决定先调用谁的RunL函数.CActiveScheduler也是非抢占式?当一个RunL函数q没有执行完的时?如果另一个CActive的状态改?会等待RunL执行完以后再执行另一个CActive的处理函?

用v来还简单吧?.



本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/suyouxin/archive/2005/01/06/242759.aspx

原文地址Qhttp://blog.csdn.net/alex_hua/archive/2008/07/10/2633137.aspx
׃做工E的UL工作Q需要移植代码到Symbianq_上,但之前代码的架构与Symbianq_看v来是有冲H,体现在之前代码中有一个独立线E用来做事g驱动、分发,然后在事件回调中完成自己的逻辑Q包括异步请求)Q该U程是用

    while(1)

    {

        getevent();

        dispatchevent()

    }

来实现。但在Symbianq_上,所有的异步Ҏ的侦是通过CActiveScheduler.Start()完成Q且该方法实际上是一个死循环。这LhQ在同一个线E中Q是不可能有两个d@环存在的Q这个移植是不能完成的,除非修改代码架构?/div>

    q个问题实困扰了很久,呵呵Q因为是一个h开发,实没有人可以帮忙出点主义,脑子也死了,想不开了。现在终于有眉目了,基本可以解决该问题,途径是理解zd对象和活动规划器的原理,灉|应用q对zdQ?/div>

    之前一直想着Qؓ了能侦测到异步请求是否完成,CActiveScheduler.Start()q个Ҏ必须在线E的初始p用,其实可以不这PCActiveScheduler.Start()在线E的M地方随时可以调用Q且CActiveSchedulerh后,q是可以侦测?#8220;很久”以前完成的异步h。例子如下:

 

/*  ============================================================================ 

 Name  : NewClassTest.h  Author   : Alex  Version  : 1.0  Copyright   : su-fun  Description : CNewClassTest declaration  ============================================================================  */

 

#ifndef NEWCLASSTEST_H 

#define NEWCLASSTEST_H

#include <e32base.h> 

// For CActive, link against: euser.lib 

#include <e32std.h>  

//For RTimer, link against: euser.lib 

 

class CNewClassTest : public CActive 


public:  

    // Cancel and destroy  

    ~CNewClassTest();

     // Two-phased constructor.  

    static CNewClassTest* NewL();

     // Two-phased constructor.  

    static CNewClassTest* NewLC();

 

public:  

    // New functions  

    // Function for making the initial request  

    void StartL(TInt aState, TTimeIntervalMicroSeconds32 aDelay);

 

private:  

    // C++ constructor 

    CNewClassTest();

     // Second-phase constructor  

    void ConstructL();

 

private:  

    // From CActive  // Handle completion  

    void RunL();

    // How to cancel me  

    void DoCancel();

     // Override to handle leaves from RunL(). Default implementation causes  

    // the active scheduler to panic.  

    TInt RunError(TInt aError);

 

public:  

    enum TNewClassTestState  

    {   

        EUninitialized=12, // Uninitialized   

        EInitialized=22, // Initalized   

        EError=32 // Error condition  

    };

 

private:  

    TInt iState; // State of the active object  

    RTimer iTimer; // Provides async timing service

};

 

#endif // NEWCLASSTEST_H

 

/*  ============================================================================  

Name  : NewClassTest.cpp  Author   : Alex  Version  : 1.0  Copyright   : su-fun  Description : CNewClassTest implementation  ============================================================================  */

#include "NewClassTest.h"

 

CNewClassTest::CNewClassTest() :  CActive(EPriorityStandard) // Standard priority 


}

 

CNewClassTest* CNewClassTest::NewLC() 

{  

    CNewClassTest* self = new ( ELeave ) CNewClassTest();  

    CleanupStack::PushL(self);  

    self->ConstructL();  return self; 

}

 

CNewClassTest* CNewClassTest::NewL() 

{  

    CNewClassTest* self = CNewClassTest::NewLC();  

    CleanupStack::Pop(); // self;  

    return self; 

}

 

void CNewClassTest::ConstructL() 

{  

    User::LeaveIfError(iTimer.CreateLocal() ); // Initialize timer  

    CActiveScheduler::Add( this); // Add to scheduler 

}

 

CNewClassTest::~CNewClassTest() 

{  

    Cancel(); // Cancel any request, if outstanding  

    iTimer.Close(); // Destroy the RTimer object  

    // Delete instance variables if any 

}

 

void CNewClassTest::DoCancel() 

{  

    iTimer.Cancel(); 

}

 

void CNewClassTest::StartL(TInt aState, TTimeIntervalMicroSeconds32 aDelay) 

{  

    Cancel(); // Cancel any request, just to be sure  

    iState = aState;  

    iTimer.After(iStatus, aDelay); // Set for later  

    SetActive(); // Tell scheduler a request is active 

}

 

void CNewClassTest::RunL() 

{  

    if (iState == EUninitialized)  

    {   

        // older timer event, 当CActiveScheduler::Start()后,E序先到达这?  

        iState = 10;  

    }  

    else if(iState == EInitialized)  

    {   

        //// new timer event   

        iState = 201;   

        CActiveScheduler::Stop();  

    } 

}

 

TInt CNewClassTest::RunError(TInt aError) 

{  

    return aError; 

}

 

// 试代码

// TInt ThreadEntry(TAny *arg), 用户U程的入口函?省略了一些必要的初始?/div>

 

TInt ThreadEntry(TAny *arg)

{

     CNewClassTest *obj1 = CNewClassTest::NewL();      

    CNewClassTest *obj2 = CNewClassTest::NewL();      

    obj-1>StartL(CNewClassTest::EUninitialized,TTimeIntervalMicroSeconds32(1000000));  //1(s)      

    User::After(5000000);  // sleep 5(s)      

    obj2->StartL(CNewClassTest::EInitialized,TTimeIntervalMicroSeconds32(20000));  //20(ms)      

    CActiveScheduler::Start();     

    delete obj1;     

    delete obj2;

}

 

        以上代码演示了如何灵zM用CActiveScheduler::Start()Q至于具体的实现上,q需要调整一下,CActiveScheduler::Start()的必还要同时启动一个超时定时器Q当在设定的时旉内没有Q何异步时间完成,则在时AO内停止活动规划器CActiveScheduler::Stop()Q这L待下一个@环到来再启动zd规划器。此时可l箋执行被CActiveScheduler::Start()Ҏ挂v的语句和Ҏ?/div>

 

ȝQ?/div>

1. 可以解决UL代码中出现的上述情况

2. 异步事g的完成检有时g

3. 因ؓ是异步事Ӟ对于一定的时gQ还是可以接受的 



本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/alex_hua/archive/2008/07/10/2633137.aspx



漂漂 2010-03-24 17:02 发表评论
]]>symbian 源代码web览http://www.shnenglu.com/AutomateProgram/archive/2010/03/24/110458.html漂漂漂漂Wed, 24 Mar 2010 09:00:00 GMThttp://www.shnenglu.com/AutomateProgram/archive/2010/03/24/110458.htmlhttp://www.shnenglu.com/AutomateProgram/comments/110458.htmlhttp://www.shnenglu.com/AutomateProgram/archive/2010/03/24/110458.html#Feedback0http://www.shnenglu.com/AutomateProgram/comments/commentRss/110458.htmlhttp://www.shnenglu.com/AutomateProgram/services/trackbacks/110458.htmlhttp://developer.symbian.org/xref/epl/xref/

漂漂 2010-03-24 17:00 发表评论
]]>
symbian 目录l构http://www.shnenglu.com/AutomateProgram/archive/2010/03/24/110444.html漂漂漂漂Wed, 24 Mar 2010 06:37:00 GMThttp://www.shnenglu.com/AutomateProgram/archive/2010/03/24/110444.htmlhttp://www.shnenglu.com/AutomateProgram/comments/110444.htmlhttp://www.shnenglu.com/AutomateProgram/archive/2010/03/24/110444.html#Feedback0http://www.shnenglu.com/AutomateProgram/comments/commentRss/110444.htmlhttp://www.shnenglu.com/AutomateProgram/services/trackbacks/110444.html原文地址Q?a >http://blog.chinaunix.net/u/9577/showart_458197.html
手机有四个盘W,你利用文件管理程序打开可以看刎ͼ它们?span>C,D,E,Z
四个?span>
      
C
盘,
如同Windows?span>C盘,是用来放|?span>Symbian OS的地方,所以我们需要给操作pȝ预留_的空_比如用来存放软gq行时生成的临时文gQ。对于已扩充?span>MMC卡的机器Q徏议把应用软g和游戏都量安装?span>MMC卡上?span>
   说明Q?span>C盘剩余空间的多少和手机内存没有直接关p,极端的例子就是在C盘装满的情况下手机照栯q行。手机内存和帔R内存的Y件有养I如输入法、主题背 景开机后׃帔R内存Q正在运行的软g和游戏也会占用内存,增加动态内存的办法是减少帔R内存的程序,用Q务管理Y?span>AppMan可以方便的察看内存状 况和关闭q程释放内存?span>
   
D
?/span>Q?/span>

高速的虚拟驱动器,主要用来保存剪脓ѝ?span>wap~存、和一些时交换文件。一般情况下Q由pȝ自动调用Q与用户联系不多。除了系l自生成的三个目录,用户自徏的文件和目录在手机重启动后都会消失?/span>
   
E
盘,
MINI闪存卡,可以用来装Y件、游戏?span>mp3、视频文件等。新MINI卡在用手机格式化后会自动生成几个默认的系l目录,有些是隐含属性的Q可以用d器在电脑上看Q查q隐藏文件夹Q要在电脑中打开文g理器的昄所有文件和文g?span>”选项Q?/span>
   
Z
盘,
是手机固化的pȝ盘,也是用户不能掌控的。格式化手机Ӟ是pȝq原Q也是?span>Z盘上自动恢复的,h升说的是通过h升该盘的系l地文g。相当于电脑上的pȝ备䆾恢复盘?/span>   

 

4个盘之中Q?span>C E Z盘的文gl构大同异

 

C:\Nokia是个无关紧要的目录,你完全可以删掉它而没有媄响,但是q个目录会经常自动生成。原因是Q?span>C盘的Nokia目录中有特别的目录如INSTALLQ这个是Z安装软g而设|的。众所周知Q?span>Symbianpȝ的Y件是打成SIS压羃包传入手机的某个存储器中Q?span>C?span>EQ然后解包安 装的Q系l往往?span>C:\NOKIA\INSTALL目录下保存一个安装副本,以备安装旉C可预见的错误Q如H然没电Q或者用户中断时能够恢复pȝ安全Q这也就是很多情况下Q在IZ很大I间?span>E盘安装Y件时Q仍然出?span>“存储I间已满的原因,保持C盘有1M以上的空余空间是个很好的习惯。另外不使用pȝ?span>manager转而?span>SeleQq行SIS安装也可以避免生这个副本?/span>

 


1?span>C盘上的文件结?/span>
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

c:\Images 照片囄存放位置
c:\Installs 
存放安装文g
c:\Music Downloads 
机子自带览器下载音乐后Q都存在q里
c:\MyMusic 
音乐模式下歌存在q里


c:\Sounds 
铃声存放文g?span>, midi文g或?span>wav文g拯?span>c:\sounds\digital\(或?span>C:\nokia\sounds\digital\)Q就可以?span>z:\Nokia\Sounds\digital\中固化的音乐文g一P出现在情景模式铃声的选择目?/span>


c:\Videos   
动画存放文g?/span>

 

c:\Data\mbook 掌上书院安装后配|文件存放文件夹Q如果遇C打不开可以把其中的umdrcnt.lstQ?span>mdstng删掉Q再打开
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

 

 

c:\sys\bin 可执行文?span>EXE目录

c:\sys\install\sisregistry\下生的文g及文件夹(?span>a00000eb\00000002_0000.ctl之类)多是程序和主题COPY到卡上后Q再用文件管理进行安装后产生的文件?span>
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

每一E序都有一个ID?br>攑֜安装盘的 Private\+ID号下面,有一个_reg.rsc的文Ӟ该文文g可能记录了可执行文g的名U和资源的位|?br>

c:\resource\apps 资源文g目录Q此目录是只ȝ

c:\resource\apps                 E序文字资源存在q里Q大多是rsc文g
c:\resource\help                  
E序自带帮助文g存放在这?span>
c:\resource\plugins              
好像是放插g的地方,但是目前只有rsc文g
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

 

 

c:\system\apps 该目录下的子目录保存了Y件的MQ用户交互可执行文g.app、无界面可执行程?span>.exe、资源文?span>.rsc、图标文?span>.aif以及q行所需的其他文件。(说明Q安装在E盘的软g除了?span>E:\System\Apps\目录下保存Y件主体之外,往往会在C:\System\Apps\同名目录下创Z些配|文Ӟ

c:\System\apps\phone\oplogo 保存了营q商的标志,如果该目录保存了97*25?span>bmp囑փQ则在待机状态下以该图片代?span>“中国Ud之类的营q商标志Q需要重新启动手机)Q?/span>

 

 

c:\System\BootData目录Q系l的启动参数和日?/span>

 

c:\system\favourites\ 收藏夹(可以这些文件移动到c:\system\favourites中)

 

c:\system\install目录Q保存了全部的Y件安装信息,每安装一个YӞ在该目录下保存一个同?span>sis文g索引Q大在几百b到几K不等Q假如删除这?span>sis文gQ在E序理中就不会出现q个软g的安装信息,也就无法通过E序理删除Q但是仍然可以在apps目录中直接删除Y件主体和配置文gQ有必要的话?span>libs目录中删除相应运行库Q在programs目录中删除相应辅助运行文Ӟ从而彻底卸载YӞ

c:\system\Install\Registry JavaE序安装记录文g

c:\System\libs保存某些软gq行旉要的q接库文Ӟ一般由软g安装

 

c:\System\mail信息目录Q结构复杂费解,除了一些短信、彩信?span>EMail讄文g之外Q收件箱、发件箱、草E箱、发送报 告、附件等{分布在丛深复杂的目录之中。值得一提的是,S60的信息概忉|较广Q短信彩?span>Email甚至U外蓝牙传输的文仉属于信息Q因此接受到?U外蓝牙的文Ӟ保存?span>mail目录下,而且可以由查看该信息触发相应?span>“安装?span>“观看?span>“~辑{动作;

 

c:\System\MIDIets  java配置文g

 

c:\System\midp目录Q?span>javaE序M安装在这里,如果全部java安装?span>E盘,c:\system\不会出现这个目?/span>

 

c:\System\programs保存辅助q行文gQ和一些无界面E序exe、动态连接库dllQ?/span>

 

c:\System\Recogs兌目录Q里面的mdl文g标识了文件关联。如QuickWord.mdl标识了系l中?span>doc文g?认由quickword打开Q另外有?span>mdl文g会驱动程序运行,?span>eLoader.mdl驱动?span>miniGPS?span>ExtendProfile{?span> ePsint公司开发的软gQ没有这?span>mdl文gQ以上两个Y件不能自动加载;

 

c:\System\Schedules目录Q顾名思义Q保存了日程安排Q?/span>

 

c:\System\SharedData目录Q全部是软g的配|文?span>.iniQ对用户作用不大Q但是可以通过修改其中的某些数值和路径从而必须安装?span>C盘的软gQ多半是7650的YӞ它没?span>mmcQ安装到mmcQ?/span>

 

c:\System\tempQ时文件?/span>

 


c:\system\Apps\Opera Opera
安装后徏?span>
c:\system\Data\Opera 
文g夹下opera.ini可调节缓存大,cache4目录为缓存目?/span>

 

 

 

c:\System\data目录Q极其繁杂的目录Q保存了各种各样的数据,单介l几个,backgroundimage.mbm壁纸Q?span> btstate.dat蓝牙配对信息Q?span>Calender日历Q?span>clockapp.dat旉参数Q?span>Contacts.cdb联系人,以及很多软g的配|文 件和wap信息Q?/span>


c:\system\data\applications.dat
功能表、文件夹、Y件图标排列顺序的备䆾文g?span>     
c:\system\data\alarmserver.ini
闚w讄文gQ?span>
c:\system\data\gsm_identity.qxc
影院SmartMoviev安装、运行和讄的文?span>
c:\system\data\ip_config_x2.sys影院SmartMoviev安装、运行和讄的文?span>
c: \system\data\StackSrv05.db影院SmartMoviev安装、运行和讄的文?span>
c:\system\data\utility_dump.dat影院SmartMoviev安装、运行和讄的文?span>
c:\system\apps\VisualRadio攉机储存电台文件备?span>,?span>2?span>
c:/data/installs/是Y件的安装目录Q可以清I?span>
c:\system\data\contacts.Cdb?span>C:\system\data\cntmodel.ini\通讯?span>
c:\system\data\scshortcutengine.ini\待机状态模?span>
c:\system\data\mms_setting.Dat\彩信讄
c:\system\data\smsreast.Dat,smssegst.Dat,sms_settings.Dat\
短信讄
c:\system\data\cdbv3.Dat\
q接讄
c:\system\data\notepad.Dat wap\
C?span>
c:\system\data\bookmarks1.db\书签
c:\system\data\profiles\
情景模式
c:\system\data\calendar\
日程?span>
c/system/install\反安装文?span>,q个目录下的 (前提:软g装在C?span>)文g都可以删除,但是如果删除了,在程序管理列表中没有了Q只能直接删?span>e\system\apps\下对应目录?span>
c/system/install\install.log\安装记录文g),要删除安装记录文Ӟ将些文件删除即可?/span>

c:/system/dmgrQ里面有两个文g夹了Q各有一?span>contents的文件夹Q这是qx上网下蝲的一些文?span>(可能是视频、音乐、文本等文g)Q可以清I?span>
c:\system\data\cbs\cbtopicsmsgs.dat\是信息中营商讄的一些信息文Ӟ如广播信息、小Z息等Q可以清I?span>
c:\preinstallAppscache.dat\多是主题、程序的安装记录文g?/span>

 

e:\system目录l构?span>c:\system基本一_不同的是Q少?span>intsall目录?span>

z:\system比之c:\system更加庞大复杂Q它保存了系l的全部自带E序、资源文件、硬仉动、字体字库、国际化讄和初始参数设|。在待机状态下输入*Q?span>7370Q,初始化手机Q基本过E就是清I?span>c盘,复制z盘某些内容至c。某U程度上?span>z是系l的初始备䆾。(新手机的W一q待机图׃??span>z:\system\data\apac.mbmQ?/span>
 
原文地址Q?a >http://hi.baidu.com/%CB%BC%D3%DA%C7%B0%CF%EB%D3%DA%BA%F3/blog/item/3d4a96371db9781b90ef39fe.html

SYMBIAN SDK 安装好后?个主要的文g夹:以S60_3rd_fp1Z

1) Examples 目录下存储的是基于Symbian OS的例子是与OS之上的UI无关的?/span>

2) Nokia_plugin 为安装扩展插件添加的目录

3) S60Doc 主要是OS的帮助开发文和UI的帮助开发文?/span>

4) S60Ex储存的是S60 UI上开发的例子

5) S60Tools 是SDK提供的一些辅助的开发例?/span>

6) Epoc32 存储着Symbian手机的模拟器

在Epoc32 下有一些比较重要的目录

① BUILD目录存储~译时生成的历史文g

② Data目录下存储的是模拟器的Z盘数据,cM手机的Z数据Q编译一个工E后Q会在这个目录下的Z目录下的相应目录下生成,MIFQ多矢量图文ӞSVG打包后得到的文gQ,MBMQ多位图文gQBMP打包后得刎ͼQRSCQ资源文件和注册表资源文Ӟ文g?/span>

③ Include目录下存储的是SDKl开发者提供的头文Ӟ包括OS和UI的头文gQ用户可以直接用,在编译一个工E后会在q个目录下生成RSG文gQMBG文g{?/span>

④ Winscw下有2个子目录C和DQ分别表C模拟器的C盘和D盘,开发者可以在C盘写数据QD盘是手机的内存,一般在手机pȝ的内部用,开发者不可以使用?/span>

⑤ Release目录下有4个子目录armv5QGCCEQwinscwQwinc

常用的有?个,分别存储不同q_~译器的链接库,winscwq存储了模拟器程序,以winscwQpc上的模拟器)ZQ编译一个工E后会在udeb/Z目录下生成与Data/Z目录下生成的一L文gQƈ且会在udeb目录下生成二q制可执行文件?/span>

SYMBIAN手机E序的工E目录:

1) Group目录Q主要存储组l文件bld.inf?.mmp文g以及E序图标及图片用文?.mk文g?/span>

2) Inc目录Q主要存储程序代码所用的头文件?/span>

3) Src目录Q主要存储程序代码的源文件?/span>

4) Data目录Q主要存储的是程序的资源文gQ?.rssQ?_reg.rssQ?.rls{文件?/span>

5) Gfx目录Q主要存储程序的图标文gQSVG格式矢量图)以及囄文g(BMP格式位图)?/span>

6) Help目录Q帮助文件目?/span>

7) Sis目录Q存储安装程序时使用?.pkg文gQ以及生成的安装文g*.sis?/span>

~译程Q首先从bld.infq入调用*.mmp文g?.mk文g

1Q?/span>*.mmp文g会对*.rssQ程序资源文Ӟ?_reg.rssQ注册表资源文gQ进行编译,q生?.rsc?_reg.rscQ二q制资源文gQ用来ɽE序加蝲使用资源和手机加蝲E序。同时生?.rsg(资源头文Ӟ对应生成每个资源的ID)在程序加载资源时使用?/span>

2Q?/span>当用位图时Q?.mmp文g会把多个位图打包?.mbmQ多囄文gQ包含程序要使用的图片以备程序加载)中,q生成位图资源ID文g*.mbg?/span>

3Q?/span>*.mk文g会对SVG格式的矢量图q行打包生成*.mifQ多矢量图文Ӟ

通过*,mmp对程序进行编译生成可执行E序?/span>

本h文章是在学习清华q见《SYMBIAN手机应用开发标准教E》经q自q一些实跉|ȝ而成Ҏ声明



漂漂 2010-03-24 14:37 发表评论
]]>
S60模拟器下删除已经调试q的应用E序的方?/title><link>http://www.shnenglu.com/AutomateProgram/archive/2010/03/24/110435.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Wed, 24 Mar 2010 06:09:00 GMT</pubDate><guid>http://www.shnenglu.com/AutomateProgram/archive/2010/03/24/110435.html</guid><wfw:comment>http://www.shnenglu.com/AutomateProgram/comments/110435.html</wfw:comment><comments>http://www.shnenglu.com/AutomateProgram/archive/2010/03/24/110435.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/AutomateProgram/comments/commentRss/110435.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/AutomateProgram/services/trackbacks/110435.html</trackback:ping><description><![CDATA[W三版,W五版下Q删除下列文Ӟ <p>  epoc32releasewinscwudebmyapp.exe</p> <p>  epoc32datazresourceappsmyapp.rsc</p> <p>  epoc32releasewinscwudebzprivate10003a3fappsmyapp_reg.rsc</p> <p>  Epoc32releasewinscwudebzresourceappsmyapp_aif.mif</p> <p>  W二版下删除下面文g?/p> <p>  epoc32releasewinsudebzsystemAPPSmyapp<br><br>从新启动模拟器?br><br>关于模拟器的工作目录都存攑֜</p> E:\S60\devices\S60_5th_Edition_SDK_v0.9\epoc32\winscw<br><br>可以自己看看相应对应的目录? <img src ="http://www.shnenglu.com/AutomateProgram/aggbug/110435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/AutomateProgram/" target="_blank">漂漂</a> 2010-03-24 14:09 <a href="http://www.shnenglu.com/AutomateProgram/archive/2010/03/24/110435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PKG语法详细说明 常用高选项http://www.shnenglu.com/AutomateProgram/archive/2010/02/25/108394.html漂漂漂漂Thu, 25 Feb 2010 01:43:00 GMThttp://www.shnenglu.com/AutomateProgram/archive/2010/02/25/108394.htmlhttp://www.shnenglu.com/AutomateProgram/comments/108394.htmlhttp://www.shnenglu.com/AutomateProgram/archive/2010/02/25/108394.html#Feedback0http://www.shnenglu.com/AutomateProgram/comments/commentRss/108394.htmlhttp://www.shnenglu.com/AutomateProgram/services/trackbacks/108394.html阅读全文

漂漂 2010-02-25 09:43 发表评论
]]>
Symbian 开?/title><link>http://www.shnenglu.com/AutomateProgram/archive/2010/02/25/108393.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Thu, 25 Feb 2010 01:42:00 GMT</pubDate><guid>http://www.shnenglu.com/AutomateProgram/archive/2010/02/25/108393.html</guid><wfw:comment>http://www.shnenglu.com/AutomateProgram/comments/108393.html</wfw:comment><comments>http://www.shnenglu.com/AutomateProgram/archive/2010/02/25/108393.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/AutomateProgram/comments/commentRss/108393.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/AutomateProgram/services/trackbacks/108393.html</trackback:ping><description><![CDATA[     摘要: 原文地址Qhttp://www.shnenglu.com/kesalin/archive/2009/07/09/89615.html一.开发环境的搭徏 1.开发工具下?开发环境选用Jdk1.5 + ActivePerl-5.6 + S60_3rd + Carbide.C++.V2.0Q请依次文g下蝲一下文件放到D:\SymbianTo...  <a href='http://www.shnenglu.com/AutomateProgram/archive/2010/02/25/108393.html'>阅读全文</a><img src ="http://www.shnenglu.com/AutomateProgram/aggbug/108393.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/AutomateProgram/" target="_blank">漂漂</a> 2010-02-25 09:42 <a href="http://www.shnenglu.com/AutomateProgram/archive/2010/02/25/108393.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过S60 3rd Edition SDK 看清S60 3.0pȝhttp://www.shnenglu.com/AutomateProgram/archive/2010/02/25/108392.html漂漂漂漂Thu, 25 Feb 2010 01:40:00 GMThttp://www.shnenglu.com/AutomateProgram/archive/2010/02/25/108392.htmlhttp://www.shnenglu.com/AutomateProgram/comments/108392.htmlhttp://www.shnenglu.com/AutomateProgram/archive/2010/02/25/108392.html#Feedback0http://www.shnenglu.com/AutomateProgram/comments/commentRss/108392.htmlhttp://www.shnenglu.com/AutomateProgram/services/trackbacks/108392.html(http://blog.csdn.net/ydfok/archive/2007/07/11/1685256.aspx)

今天下午下蝲?font face="Times New Roman">S60 3rd Edition SDK 仔细看了?/font>sdk.把自q一点认识跟大家分n一?/font>.

QUOTE:

首先看看S60 3.0改变了什?/font>:

   1. S60 3.0的权限分Z大类Q系l权限和用户权限。权限是针对资源讉K的,其实大多数系l和用户资源的位|是公开的,只是q所有资源都能访问或者说q所有资源都惌用户通过应用去访?/font>通过提供基本的安全通信协议.q_安全性也可以支持提供数据保密?/font>.完整性和鉴权.它还支持通过使用数字{֐对可安装软gq行鉴权

  2.新版S60 3rd Edition增强了多媒体及企业应用功?/font>.大彩色屏q?/font>(176x208标准?/font>240x320 QVGA?/font>352x416双分辨率)和各U输入键(两个软键、五向导航键以及一些专用键).单手使用和大彩色屏幕的原则也使得应用开发h员能够展现具有吸引力的内容ƈ提供便的D。除了传l的176x208U向布局外,横向布局也支持双分L?/font>(352x416)?/font>QVGA (240x320)模式

3.S60 3rd Edition SVG光栅化(rasterizingQ引擎支?/font>SVG Tiny 1.1标准Q还支持直线和填充不透明度及渐变?/font>.

QUOTE:

关于W一个权限问?font face="Times New Roman">.NOKIA论坛说程序和用户被止讉K文gpȝ.在真机^C下列文gҎ有权限是不能讉K?/font>

/sys/bin/文g夹-包括E序的可执行文g(不能讉K)

/private/文g夹-包括E序的一些数?/font>(不能讉K)

/private/<SID>Q这?/font>SID是一个程?/font>ID?/font>

/resource/文g夹-包含的是׃n文g

让我们一L?font face="Times New Roman">SDK里有什么内?/font>:

QUOTE:

Z?/font>:分ؓ

1. ipdatatest 包含一些配|文?/font>

2. private  文g多w面很多类?nbsp;101f4cd5   101f6cfeq样的文件夹.里面包含 backup_registration.xml.commondsy.ini之类的配|文?/font>

3.resource 里面是共享的文g.resource 根目录有很多aknnotpi.rscq样的资源文?/font>.也有很多apps.bootdata.fep.fonts.messaging.xmlq些大家熟悉的文件夹.安装E序后一些公q文g放在这?/font>

4.smoketest 里面是一些配|文?/font>

5.sys包含bin?/font>data文g?/font>.bin/文gҎE序的可执行文g和资源文?/font>RSC或链接库{?/font>(不能讉K). data文g多w有一些数据文?/font>

6.system文g夹又包含.apps.data.install.programs.sounds{文件夹.q些文g夹跟现在的文件夹的内容差不多.没有什么改?/font>

有兄弟可能会?font face="Times New Roman">.Z?/font>resource ?/font>system都有apps.data{文件夹.q里׃CS60 3.0的权限问?/font>.一个程序只能访问自q文g夹而不能访问其他应用程序文件夹.resource 文g夹做为共享文件夹.存放已安装程序的一些链接库{?/font>.

QUOTE:

   S60 3.0应用E序最大的改变是加入了数字{֐对应用程序进行授?/font>.Z么要q样?/font>.NOKIA考虑到安全性的问题.必须l过数字{֐.q点?/font>SPpȝ上加入数字签名差不多.从概念上来说.是在q程序当中加了一道锁.只有l过{֐验证的应用程?/font>.才能打开q道?/font>.才能q行手机?/font>.如果应用E序被修改过.例如汉化或者破?/font>.或者用了一些未l签名许可的敏感?/font>API.应用E序׃能在手机上执?/font>.在用安装应用包?/font>.可以多次使用数字{֐.如果不修改这个内容又想通过数字认证鉴权.辑ֈ破解目的.q点在现在来说具有一定困?/font>.

S60 3.0的应用程序变成了EXE.打包后的文g也变成了SISX.x从以前的SIS转变?/font>SISX.APP转变?/font>EXE.那么在编写程序和打包斚w又有什么不同呢.具体的改变又有那些呢.

QUOTE:

1.首先应用E序入口Ҏ变了.

2.S60 BLD.INF 工程文g的改?/font>.

3.MMP文g的改?/font>

4.应用E序 RSS 资源文g的改?/font>

5.d了应用程序注册文?/font>

6.增强?/font>ICON的编?/font>.加入了第三版?/font>MIF文g.同时也支持旧版的MBM文g

7.打包时增加了数字认证

有了q些改变?font face="Times New Roman">.S60 3.0pȝ的应用程序还支不支持SIS文g格式呢?从论坛现有的S6 3.0q_的文件来?/font>.S60 3.0q_是支?/font>SIS格式?/font>.其打包依旧通过PKG文g.下面来分析下S60 3.0 自带helloworld?/font>PKG文g

QUOTE:

; HelloWorldBasic_armv5.pkgPKG文g?/font>

;

;Language - standard language definitions

&EN定义语言文g

; standard SIS file header

#{"HelloWorldBasic"},(0xA000017F),1,0,0软g?/font>

;Localised Vendor name

%{"Vendor-EN"}

;Unique Vendor name

:"Vendor"

;Supports Series 60 v 3.0

[0x101F7961], 0, 0, 0, {"Series60ProductID"}产品ID和支持机?/font>

;Files to installE序安装文g

"..\..\..\epoc32\release\armv5\urel\HelloWorldBasic.exe"                -"!:\sys\bin\HelloWorldBasic.exe"

"..\..\..\epoc32\data\z\resource\apps\HelloWorldBasic.rsc"              -"!:\resource\apps\HelloWorldBasic.rsc"

"..\..\..\epoc32\data\z\private\10003a3f\import\apps\HelloWorldBasic_reg.rsc"  -"!:\private\10003a3f\import\apps\HelloWorldBasic_reg.rsc"

"..\..\..\epoc32\data\z\resource\apps\helloworldbasic_aif.mif"                -"!:\resource\apps\helloworldbasic_aif.mif"

"..\..\..\epoc32\winscw\c\private\A000017F\hello.txt"                        -"!:\private\A000017F\hello.txt"

;required for application to be covered by backup/restore facility S60 3.0l多了q个备䆾和注册文?/font>

"backup_registration.xml"                                                -"!:\private\A000017F\backup_registration.xml"

通过分析上面?font face="Times New Roman">PKG文g我们不难发现.

1.E序安装后的ȝ录从现在?/font>system\app\*.E序名变成了\sys\bin文g?/font>.二进制文件位?/font>\sys\bin目录?/font>

2.S60 3.0依旧支持RSC资源文g.

3.A000017F\hello.txt为程?/font>ID?/font>.

4.图标名称也由现在?/font>*.AIF变成?/font>×_aif.mif

5.q且多了一个应用程序注册文?/font>backup_registration.xml

在创?font face="Times New Roman">SISX文g前我们需要获?/font>R&D证书以便为您的应用签?/font>.

W一个方法是购买一?font face="Times New Roman">VeriSign ACS Publisher ID..获得Developer Access Certificate

W二个方法是创徏一个私钥和自签名证?nbsp;Makekeys 工具可用于创建私钥和自签名证?/font>.工具我会在下面提?/font>

  那么我们来看一?font face="Times New Roman">.SIS文g怎么加入数字{证变成.先把上面?/font>PKG文g打包?/font>SIS文g后再q行signsis命oq将R&D密钥和证书信息作为参数输?/font>

MAKEKEYS创徏U钥和自{֐证书命o:

makekeys -cert -dname "CN=Michael OR=Ltd CO=CN" MyApp.key MyApp.cer

?font face="Times New Roman">signsis{v命o

SignSIS InternetEmail_v30_gcce.sis InternetEmail_v30_gcce.sis DevCert.cer Access.key 3G365KEN

DevCert代表目标讑֤.Access Key代表认证的私?/font>.3G365KEN则是认证U钥文g的密?/font>

   那么S60 3.0 q_除了q些变化外还有什么变?/font>.

QUOTE:

最明显的变化就是分辨率的变?font face="Times New Roman">.S60 3.0?/font>176 x 208像素.208 x 176像素.240 x 320像素

.320 x 240像素.352 x 416像素.416 x 352像素.在模拟器下大家可看到SDK对各U分辨率的支?/font>.据大qx某篇评测说以后的软g根据分辨率自动调整.怿以后的Y件会拥有来好的兼Ҏ?/font>.

补充一?font face="Times New Roman">.以后的汉?/font>.破解会不会更困难.我不会破解只说下今天下午?/font>SDK内自带的RSC的看?/font>.

QUOTE:

  通过囄可以看到现在的汉化Y件完全兼容第三版的资?font face="Times New Roman">.可进行修改等.



漂漂 2010-02-25 09:40 发表评论
]]>
þˬˬƬAV| þþƷƷ| þþþ18| þùһ| ˾Ʒþ| ٸþĻ| ޾Ʒþþþ66| þ޾Ʒa| պŷۺϾþ| 69Ʒþþþùۿ | AƬٸþ| ŷҹAŴƬþ| ޾ƷNVþþþþþþþ| ݹ97þ÷ѹۿ| ޾Ʒһۺ99þ| ŷþ18| ˾þô߽ۺͼƬ| պƷþþþþ| www.þ.com| þҹɫ˾Ʒ| ҹƷþþþþ| ۺϾþþþþùɫ| Ӱһþþþó˾Ʒۺ | ˬݾþþۺ鶹| ޹Ʒþþѿ| þþþ޾Ʒһ| þþwww| ƷþþþӰԺ۲| Ʒ99þþþ | һŮȫƾþƬ | 99þɫĻ| 99þþƷҹһ| þþƷֻоƷ66| þþþþþþ˳| ھƷþþþþ99| þ޵Ӱ| žžþ99ۺһ| þĻƷ| 1000Ʒþþþþþþ| ˾þóۺӰԺ | þþƷ|