转:Symbian进程间共享

阅读更多
在一个线程开一个全局的服务,另外一个可以通过全名字,或者部分名字查找这个服务,然后取得这个全局服务的内存地址,得到内存中的数据。

      在symbian上有RChunk,RTread等类,但是在3rd fp1上取消了RTread的Read和Write方法,所以只能用RChunk类了,调用方法如下:

       一个线程启动服务:

       _LIT(KChunkName,"xn Globla Chunk");
       TInt rc=iChk.CreateGlobal(KChunkName,0x1000,0x5000); 

       //取得共享内存地址

       TUint8* uid=iChk.Base();
       HBufC* buf=HBufC8::NewL(255);
       buf->Des().Copy(_L8("123456"));
      
       //uid=&(iHbuf->Des()[0]);
       //将数据放入到共享内存中

       TPtrC8 ptr;
       Mem::Copy(uid,(TAny *)buf->Des().Ptr(),buf->Length());
       //服务线程ok

      另外线程:

      _LIT(KChunkName,"xn Globla Chunk");
      RChunk chk;
      chk.OpenGlobal(KChunkName,0);//第一个参数指定了全局内存块的名称,第二个参数用于说明块是为只读(1)还是可写的(0)
      TUint8* uid=chk.Base();
      TPtrC8 ptr;
     //Mem::Copy(uid,(TAny *)iHbuf->Des().Ptr(),iHbuf->Length());
     ptr.Set( (const TUint8*)uid , chk.Szie());

     //ok 共享内存中的数据取到了,当然也可以修改。

你可能感兴趣的:(Symbian)