请教一个symbian最基础的问题,一直想不通

xlxying 2009-08-13 07:28:00
创建一个新项目,比如hello,在hello.cpp中
LOCAL_C CApaApplication* NewApplication()
{
return new ChelloApplication;
}

GLDEF_C TInt E32Main()
{
return EikStart::RunApplication(NewApplication);
}
问题是:
RunApplication方法明明要传TApaApplicationFactory类型的参数,为什么可以传递CApaApplication*类型的参数呢?请高手解惑,谢谢大家
...全文
102 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
aa19850033 2010-05-17
  • 打赏
  • 举报
回复
路过,学习,哎 小弟还在为搭平台而烦恼.
liel_tang 2010-05-10
  • 打赏
  • 举报
回复
在TApaApplicationFactory 类里有如下定义

typedef CApaApplication* (*TFunction)();
........
IMPORT_C TApaApplicationFactory(TFunction aFunction);
beyondma 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chenhaitao123 的回复:]
在EikStart::RunApplication(NewApplication);的调用过程中隐掉了TApaApplicationFactory类的构造而已,其实拆分开来就是:

TApaApplicationFactory myApaApplicationFactory(NewApplication);
EikStart::RunApplication(myApaApplicationFactory);

呵呵

[/Quote]
Ding
chenhaitao123 2009-08-14
  • 打赏
  • 举报
回复
在EikStart::RunApplication(NewApplication);的调用过程中隐掉了TApaApplicationFactory类的构造而已,其实拆分开来就是:

TApaApplicationFactory myApaApplicationFactory(NewApplication);
EikStart::RunApplication(myApaApplicationFactory);

呵呵
chenhaitao123 2009-08-14
  • 打赏
  • 举报
回复
兄弟,首先,你说EikStart::RunApplication(NewApplication)这样调用是传递CApaApplication*类型的参数就已经错了,这样调用只是传递一个函数指针而已(要回去再看一下c++了,呵呵)

下面我来解释一下为什么可以这样子调用:
首先,你的ChelloApplication类是继承自CApaApplication类的(具体看sdk或者系统头文件)

其次,你在sdk里查找TApaApplicationFactory类,看它是不是有一个IMPORT_C TApaApplicationFactory(TFunction aFunction)的构造函数

然后,再看TFunction 的定义 :typedef CApaApplication*(* TApaApplicationFactory::TFunction)();
所以,TFunction就是一个函数指针,函数返回类型为CApaApplication*

现在应该清楚为什么这样调用了吧,其实就是函数指针作为参数而已。
xlxying 2009-08-14
  • 打赏
  • 举报
回复
谢谢大哥解答,嘛也不说了,给分(虽然少了点。。)
xlxying 2009-08-14
  • 打赏
  • 举报
回复
能不能解释一下上面定义的意思,如何做到传递NewApplication就传递了一个用NewApplication初始化的TApaApplicationFactory对象
alex_hua 2009-08-13
  • 打赏
  • 举报
回复
class TApaApplicationFactory
/** Encapsulates the functionality of creating an application, whether it be via a factory function
or an ECOM plugin. Instances of this class can usually be created implicitly when required as
function parameters - just specify the function pointer, ECOM plugin UID or CImplementationInformation

reference.

@publishedAll
@released
@see CApaProcess
@see EikStart */
{
public:
typedef CApaApplication* (*TFunction)();
public:
IMPORT_C TApaApplicationFactory();
IMPORT_C TApaApplicationFactory(TFunction aFunction);
...
}

3,119

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧