Symbian挫折
Symbian的挫折,2007-12-18 10:25
SDK为s60 2nd fp2 chinese,必须装c盘不用设环境变量,很好使,装其他盘根本不认,设了环境变量也没用,不知道跟ActivePerl对那些.bat文件的解释是否有关,总之,这个SDK装在其他盘我没搞定。
上网和socket测试一切OK,没有过去一些朋友提到的问题,中文模拟器浏览中文网页乱码,不知道是网页的问题还是模拟器的问题,网页用n72看不乱码,不知道是否与网页的编码有关。
由于刚接触Symbian,就是想在HelloWorldPlus例子中加入一个CEikLabel控件,练练手
于是cmd进入HelloWorldPlus目录下的group,
运行bldmake bldfiles
运行abld make vc6,一切OK
进入目录C:\Symbian\8.0a\S60_2nd_FP2_SC\epoc32\BUILD\SYMBIAN\8.0A\S60_2ND_FP2_SC\SERIES60EX\HELLOWORLDPLUS\GROUP\HELLOWORLDPLUS\WINS
超级长目录
打开HELLOWORLDPLUS.DSW
在HelloWorldPlusAppView.h中
定义class CEikLabel;
定义CEikLabel* iLabel1;
在HelloWorldPlusAppView.cpp中
包含头文件#include <eiklabel.h>
在HelloWorldPlusAppView的ConstructL中加入以下代码
///*
_LIT(KText, "YYYY");
HBufC* labelstring;
labelstring = HBufC::NewLC(10);
*labelstring = KText;
iLabel1 = new ( ELeave ) CEikLabel;
iLabel1->SetContainerWindowL(*this);
iLabel1->SetTextL(KText);//labelstring
iLabel1->SetRect(TRect(0, 20, 50, 50));
CleanupStack::PopAndDestroy(labelstring);
//*/
注:一开始以为需要HBufC*类型的描述符参数,后来发现看错了函数,
应该用SetTextL而不是SetText,结果白定义labelstring了
写完编译,发生link错误
查看SDK中的help,发现要link eikcoctl.lib
在VC中,Project->Settings...->link->Object/library modules中加入
"\Symbian\8.0a\S60_2nd_FP2_SC\EPOC32\RELEASE\WINS\UDEB\eikcoctl.lib"
再次编译,还是错误
关闭vc6
进入HelloWorldPlus目录下的group,打开mmp文件,加入library eikcoctl.lib,保存,删除abld.bat
再次cmd进入HelloWorldPlus目录下的group
再次运行bldmake bldfiles
再次运行abld make vc6
打开HELLOWORLDPLUS.DSW,编译,错误,无法创建XXXX.rsg文件,在VC中clean一次,编译还是错误
再次关闭vc6
第三次cmd
运行abld clean
运行 abld build wins udeb
再次打开HELLOWORLDPLUS.DSW,编译,除了警告vc不是sp3外一切ok。
调试运行,模拟器中执行HW+
看不见添加的iLabel1
仔细看了一遍代码,发现HelloWorldPlusAppView不是从CAknView继承的,是从CCoeControl继承的,
(我X,忍不住骂街了),成了复合控件了
在HelloWorldPlusAppView.h添加
void SizeChanged();
TInt CountComponentControls() const;
CCoeControl* ComponentControl(TInt aIndex) const;
在HelloWorldPlusAppView.cpp中添加
void CHelloWorldPlusAppView::SizeChanged()
{
// TODO: Add here control resize code etc.
iLabel1->SetExtent( TPoint(10,50), iLabel1->MinimumSize() );
}
TInt CHelloWorldPlusAppView::CountComponentControls() const
{
return 1; // return nbr of controls inside this container
}
CCoeControl* CHelloWorldPlusAppView::ComponentControl(TInt aIndex) const
{
switch ( aIndex )
{
case 0:
return iLabel1;
default:
return NULL;
}
}
再编译,没有错误有2个警告,不管它,调试运行
在函数void CHelloWorldPlusAppView::SizeChanged()
的语句iLabel1->SetExtent( TPoint(10,50), iLabel1->MinimumSize() );报措
查看变量iLabel1发现是null的
检查代码发现ConstructL中,SetRect( aRect );写在iLabel1 = new ( ELeave ) CEikLabel;之前了
非常郁闷,调整SetRect( aRect );语句到后面
编译,没有错误有2个警告,不管它,运行,一切OK!
上面的警告为
EDLL.LIB(UP_DLL.obj) : warning LNK4099: PDB "edll.pdb" was not found with "\Symbian\8.0a\S60_2nd_FP2_SC\EPOC32\RELEASE\WINS\UDEB\EDLL.LIB" or at "C:\Symbian\8.0a\S60_2nd_FP2_SC\EPOC32\BUILD\SYMBIAN\8.0A\S60_2ND_FP2_SC\SERIES60EX\HELLOWORLDPLUS\GROUP
\HELLOWORLDPLUS\WINS\UDEB\edll.pdb"; linking object as if no debug info
不知道什么意思,我这直接编译例子程序也有这个警告,希望知道的给讲一下
我够笨的,忙活三天总算看见label控件了,希望能给刚接触Symbian的朋友一些鼓励,你们总不会比我还差了吧。
还有请教Symbian高手,
比如要增加一个视图从CAknView继承
只能手写
class CMyView : public CAknView
添加#include <aknview.h>吗?
能否自动创建?
必须手工在.mmp文件中修改增加的文件重新在cmd中编译工程吗?
有没有其他快捷的办法或者工具?.rss资源文件有没有图形化的编辑工具?