当前位置: 首页 >> 程序设计 >> Symbian开发实用小知识
 

Symbian开发实用小知识

作者:      来源:zz     发表时间:2007-12-28     浏览次数:      字号:    

1. 编译顺序
bldmake clear
bldmake bldfiles
abld reallyclean
abld makefile vc6
abld build wins udeb
abld build armi urel
2. 模拟器上网:用network_config.bat配置网络,然后打开npacketadmin.exe不要关闭,就可以直接访问站点了。
3. 调试输出
#ifdef _DEBUG
#define TRACE(a) RDebug::Print a
#else
#define TRACE(a)
#endif
int iFlag = 0;
_LIT(KTraceOutput,"Value of iFlage is %d");
TRACE((KTraceOutput,iFlag));
//RDebug::Print(_L("test"));
4. mbg无法找到
一般在.mmp中用"START   BITMAP"定义mbm文件,然后使用   bldmake   bldfiles  
生成的abld.bat里调用bmconv将多个bmp文件压缩成一个mbm文件,同时可以生成mbg文件,即:  
One.bmp,   Two.bmp,   Three,bmp   ==>   bmconv.exe   ==>   MyMbm.mbm   +   MyMbm.mbg  
其中mbg文件中列出的是各张图片在mbm文件中的索引号。
如果还不行就:
abld   reallyclean  
bldmake   clean   
bldmake   bldfiles  
abld   build   wins   udeb
5. 小知识
导入资源:HBufC* titleText = StringLoader::LoadLC(R_TITLE_TEXT);titlePane->SetTextL(*titleText);
loc文件是在rss文件中导入的(不知道会不会在hrh中),在项目中只能找到rss的相关定义
6. symbian构架三种模式:
基于控件的传统symbian os架构,vc6默认创建,<Series 60 应用程序开发>中例子helloworld;
基于对话框的架构,<Series 60 应用程序开发>中例子SimpleDlg;
基于Avkon视图 切换 架构,sdk例子Series60Ex\multiviews.
7. 文件/流/存储
7.1 创建RFs/关闭RFs:
User::LeaveIfError(iFs.Connect());
delete iMetalsCsvFileLoader;
    iMetalsCsvFileLoader = 0;
    iMetalsCsvFileLoader = CCsvFileLoader::NewL(iFs, *iElementList, *this, KMetalsFileName);
    iMetalsCsvFileLoader->Start();

delete iMetalsCsvFileLoader;
iFs.Close();
7.2 使用GetDir()读取目录列表
void getFirstFilenameL(RFs& aFs,const TDesC& aFolderName,TDes& aFirstFileName)
{
CDir* dir = NULL;
User::LeaveIfError(aFs.GetDir(aFolderName,KEntryAttNormal,ESortByDate,dir));
if(dir->Count()){aFirstFileName = (*dir)[0].iName;}
else{aFirstFileName.Zero();}delete dir;//因为拥有所有权
}
7.3 RFile 打开或者关闭
void CCsvFileLoader::ConstructL(const TDesC& aFileName){iFileName = aFileName;
User::LeaveIfError(iFile.Open(iFs,iFileName,EFileRead));}
CCsvFileLoader:: ~CCsvFileLoader(){iFile.Close();}
7.4 读取文件
void CCsvFileLoader::FillReadBufferL(){
User::LeaveIfError(iFile.Seek(ESeekStart,iFilePos));
iFile.Read(iReadBuffer,iReadBuffer.MaxSize(),iStatus);
SetActive();}
7.5 写入文件
TPtrC8 ptrC8((TUint8*)des16.Ptr(),des16.Size()));
User::LeaveIfError(iFile.Write(ptrC8,iStatus));
回读
delete iBufC8;
iBufC8 = NULL;
TInt size = User::LeaveIfError(iFile.Size());
iBufC8 = HBufC8::NewL(size);
TPtr8 ptr8 = iBufC8->Des();
User::LeaveIfError(iFile.Read(ptr8,iStatus));
并且在RunL()方法中:
TPtr16 ptr16((TUint16*)iBufC8.Ptr(),iBufCS.Size()/2);
iObserver.Notify(ptr16);
7.6 搜索
//enum TSeek {ESeekAddress,ESeekStart,ESeekCurrent,ESeekEnd};
User::LeaveIfError(iFile.Seek(ESeekStart,iFilePos));
.................
8 http通信
8.1 打开会话RHTPSession iSession.OpenL();
8.2 发送get请求
字符转换
TBuf<EMaxUrlLength> iUri;iUri = KDefaultUrlText;GetRequestL(iUri);
void CHTTPExampleEngine::GetRequestL(const TDesC& aUri){ParseUriL(aUri);}
void CHTTPExampleEngine::ParseUriL(const TDesC& aUri){delete iUri;iUri = NULL;
iUri = HBufC8::NewL(aUri.Length());iUri->Des().Copy(aUri);
User::LeaveIfError(iUriParser.Parse(*iUri));}
创建: iTransaction = iSession.OpenTransactionL(iUriParser, *this,
iSession.StringPool().StringF(HTTP::EGET, RHTTPSession::GetTable()));
8.3 添加请求头部
8.4 提交请求和接受响应
iTransaction.SubmitL();它是一个异步函数,在请求事务的过程中,将进程中通知事件发送到MHTTPTransactionCallback
对象的MHFRunL()方法中,这个对象通过引用RHTTPSession::OpenTransaction()来传递。

EGotResponseHeaders---接收到响应头部时产生此类型。
EGotResponseBodyData--接收部分或全部响应主体时产生此类型。
EResponseComplete---接收到整个响应时产生此类型。

9. http返回代码"RFC 2616".
10. D:\Symbian\7.0s\Series60_v21_C\Epoc32\wins\c地址
11.error Dll '*.APP' has initialised data.的解决方案
1,release by armi这样你会在C:\Symbian\8.0a\S60_2nd_FP2_SC\epoc32\release\armi\urel下找到yourapp.app.map打开查找.data
.data           0x1000d000        0x0
                0x1000d000                __data_start__=.
*(.data)
*(.data2)
*(SORT(.data$*))
                0x1000d000                __data_end__=.
*(.data_cygwin_nocopy)
__data_start__=.与__data_end__=.出现的任何值都是错误的使用了全局变量
查找.bss
.bss            0x1000d000        0x0
                0x1000d000                __bss_start__=.
*(.bss)
*(COMMON)
                0x1000d000                __bss_end__=.
同理在这中间出现都是没有初始化的变量(理论是这样的,很奇怪我的问题确是因为CONST 引起的)
2,尤其是在移植C的代码到symbian CPP中时要注意 多个全局变量产生错误的问题在EXE中不会出现
12. VS 2003可以在"输出"窗口中选择"生成"项来查看更详细的错误信息.
13. vc中loc定义为
rls_string qtn_vrex_pause           "Pause"
vs中应该定义为
#define qtn_vrex_pause           "Pause"

14. loc文件应该用UE软件保存成utf-8 no bom格式。这样就会减少很多错误
15. #include <aknmessagequerydialog.h>
//avkon.lib
TPtrC   messagePtrC(_L16("00000000000k!"));
    CAknMessageQueryDialog   *dlg=CAknMessageQueryDialog::NewL(messagePtrC);   
    dlg->PrepareLC(R_AVKON_MESSAGE_QUERY_DIALOG);
    dlg->QueryHeading()->SetTextL(_L16("0kkkkkkkkkkkkkkk!"));
    dlg->RunLD();

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •