Symbian错误汇总

list->SetListBoxObserver(this);
编译时总是出错,问题如下:
Undefined symbol: 'void CEikListBox::SetListBoxObserver(class MEikListBoxObserver *) (?SetListBoxObserver@CEikListBox@@QAEXPAVMEikListBoxObserver@@@Z)' referenced from 'void ChelloAppView::ConstructL(class TRect const &) (?ConstructL@ChelloAppView@@AAEXABVTRect@@@Z)'

 

解决:

include <eiklbx.h> and add Library named 'eikcoctl.lib'

 

1.在资源文件中添加了一个菜单项,.hrh. .rss及handlecommandL都做了相应修改,但运行时总出现这两个错误:

VRex  fatal error U1077: “perl” : 返回代码“0x1”

VRex  error PRJ0019: 工具从"Building resources from VRex_caption.rss"

在..\VC7\bin目录下添加msobj71.dll,(这文件在..\common\IDE目录下存在)

环境变量的设置:(作为参考,这只是我机子安装相关开发软件的路径,请根据自已的实现做相对修改)

Path

C:\Program Files\Common Files\Symbian\Tools;C:\Program Files\PC Connectivity Solution\;C:\Perl\bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Java\jdk1.5.0_11\bin;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin;C:\Program Files\Nokia\CodeWarrior for Symbian v3.1\Bin;C:\Program Files\Nokia\CodeWarrior for Symbian v3.1\Symbian_Tools\Command_Line_Tools

CLASSPATH

D:\Tools\Java\jdk1.5.0_11\lib

EPOCROOT

\Symbian\8.0a\S60_2nd_FP2_SC\

 

2.郁闷:今天编译程序时老提示"Shell error LNK2019: 无法解析的外部符号 "public: __thiscall CameraServer.SetLightingConditions(RCameraServ::ELightingNormal);,该符号在函数 "public: void __thiscall CCameraManager:ConstructL(class TRect const &)" (ConstructL@CCameraManager@@QAEXABVTRect@@@Z) 中被引用"类拟的error.在明明在*mmp已加

LIBRARY         CameraServer.lib ,在cmd 都可编译通过,可是在vc7老提示上述错误.

后来我引入一个库文件才能解决这个问题,请在项目资源管理器中右击项目->属性->配置属性->链接器->命令行 ,在右边的 附加选项 中输入 CameraServer.lib.

原因:可是有时直接在mmp添加库文件是不能生效的.

3.郁闷   "c:\Symbian\shell\src\ShellAppUi.cpp(457): error C2664: “CAknViewAppUi::AddViewL” : 不能将参数 1 从“CHelpView *”转换为“CAknView *” "这鬼问题困惑了我一晚上,原来是HelpView.h中没继承CAknView.

解决:class CHelpView : public CCoeControl, MEikListBoxObserver,CAknView

4.暂没解决

error C2243: “类型转换” : 从“CHelpView *”到“CAknView *”的转换存在,但无法访问"

 5.郁闷.困惑我一天.不过也很爽的.终于解决了.以后多多学习,积累经验.

Error:EIKCTL 42   一般没提示哪处出错或中断.只会显示"程序已关闭".

所以很难查找到出错的地方,唯有好好增强编程思想.

通过上网查了些有关的资料和请教技术Q群的大侠们.得知:

1.绘制控件Draw()时出现无效的资源句柄,如bitmap等。

2.还有ComponentControl函数是否返回了正确的指针

3.CountComponentControls函数是否返回了正确的控件数量

通过仔细检查相关代码:

 //iHelpListBox = new (ELeave) CAknSingleGraphicStyleListBox;

应用:

    iHelpListBox = new (ELeave) CAknSingleStyleListBox;

因为我采用的是没图标显示的ListBox.

 

6. Differences on Coding requirement from WINSCW UDEB emulator

and ARMI UREL real handset compilation:

(1). // this works in Emulator (WINSCW UDEB)

// this fails in ARMI UREL

switch (selection)

{

case EONE:

doSomething();

break;

}

// this works in both Emulator and ARMI UREL

switch (selection)

{

case EONE:

{

doSomething();

break;

}

}

(2). 发现send 的message中用(TDesC)传入的String在手机都不能显示

Fixed , 用

方式1: (working in handset)

TBuf<Kshortlen> Kusername;

Kusername.Append(_L("Supersoar"));

msgRegister(Kusername, TRUE, sendBuf);

代替

方式2:

_LIT(Kusername, "Supersoar");

msgRegister((TDesC)Kusername, TRUE, sendBuf);

上面的方式2,Kusername在模拟器没问题,在手机上不能正常显示

改成用方式1后用ARMI compile就没有原来的warning了

(credit: Supersoar)

7.error PRJ0019: 工具从"正在执行预生成事件..."

VS 2003可以在"输出"窗口中选择"生成"项来查看更详细的错误信息.

8.symbian开发过程要注意的一些问题.以下为转贴:

1:调用可能异常退出的函数时,考虑如果程序在该处退出,将发生什么问题,必要时清理API函数。

2:任何游可能发生异常退出的函数应该以L结尾

3:使用(ELeave)来实例化对象。但是要记住,这些代码这时也会异常退出。

4:始终只将一个堆类声明为一个指针,并通过new来创建堆类,决不以自动变量方式声明或者实例化堆类。

5:如果调用一个以LC结尾的函数,必须从清理栈弹出由该函数返回的指针,否则调用函数退出时,程序会崩溃。

6:对CBase类的对象、简单buffers和不带析构函数的对象,只使用CleanupStack::PushL()方法。

7:编写DLL时,.h文件内,对希望为DLL用户可用的函数,在各函数声明前放置IMPORT_C,并在个函数的实现前面放置EXPORT_C

8:在DLL中不使用可写的全局数据。任何外部全局变量必须为const类型。模拟器构建可能会绕幸成功,但是在手机上构建时会报错。

9:在EXE文件中可使用可写的全局数据。

10:遵循成员变量、参数、枚举类型、常量和宏的命名标准。

11:当创建一个在堆中进行实例化的对象时,从CBase类派生,并在类名前添加前缀C

12:使用Symbian OS API时,包换SDK文档指定的头文件和导入库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值