分类: 嵌入式
2010-06-11 19:11:45
与大多数面向对象的平台一样,BREW平台中的各种接口均继承自一个通用的接口。图7.2 列举出了一部分BREW接口的继承关系:
图7.2 BREW接口继承关系
图7.2中列出了BREW接口中一部分具有继承关系的接口,这些列出来的接口只是BREW众多接口中的一小部分,不过确是最常用的一部分接口。从图的左边到右边,按照箭头方向依次是从基类接口到派生接口。派生接口的实例可以调用其基类接口定义的方法进行调用。所有的BREW接口均继承自IBase接口,用来进行最为基本的资源管理。IBase接口提供了两个方法IBASE_AddRef和IBASE_Release。对于任何一个BREW接口的指针,我们都可以使用IBASE_AddRef接口来增加接口指针的引用计数;使用IBASE_Release接口减少接口指针引用计数,当接口的引用计数变为0之后,将释放这个接口所占用的资源。
通过这种接口之间的继承关系,我们可以编写一些针对某基类接口的控制函数,从而可以实现对多种派生接口的控制。例如我们可以编写一个使用数据流接口IAStream的函数,这样我们为这个函数传入IFile或者ISocket接口都是合法的。我们还可以编写一个所有控件的设置矩形显示框的公用函数,在这个函数中我们可以传入任何一个继承自IControl的接口指针,然后调用ICONTROL_SetTect方法来设置控件的显示区域。
最常用的一个BREW接口是IShell接口,它提供了一组系统级的方法,包括创建一个接口的实例等功能。例如,我们可以使用ISHELL_CreateInstance接口创建一个IDisplay接口指针的实例:
ISHELL_CreateInstance( pIShell, AEECLSID_DISPLAY, (void **) &pme->m_pIDisplay); |
如果我们花一些时间去浏览每一个BREW头文件的话,可以发现pIShell代表了一个IShell接口的指针,而pme->m_pIDisplay则是一个IDisplay类型的接口指针,通过在这个变量前面加上取址运算符“&”作为参数传入,我们就可以获得一个IDisplay型的接口指针了。最后,我们就可以通过这个接口指针使用IDisplay接口中提供的各种方法了。
除了ISHELL_CreateInstance接口外,IShell接口中还提供了各种不同作用的接口,如设置闹钟和定时器的接口,启动和关闭应用程序的接口,创建和关闭对话框的接口等等。您可以查看BREW的API文档查看其中的每一个接口,或者在本书的下一篇中您也能看见这些不同种类API的作用以及它们可能的内部机理(尽我所能的为您剖析)。
除了IShell等接口之外,BREW还提供了一组助手函数,它们中有很多的实现是为了替换C标准库的函数。幸运的是,我们不需要为如何使用它们而感到担心,因为通常它们的形式与标准的C语言库相比就是大写的而已。一些常用的函数对比如下:
BREW助手函数 |
C语言标准库 |
ATOI |
atoi |
DBGPRINTF |
printf |
FREE |
free |
MALLOC |
malloc |
MEMCMP |
memcmp |
MEMCPY |
memcpy |
MEMMOVE |
memmove |
MEMSET |
memset |
REALLOC |
realloc |
SPRINTF |
sprintf |
STRCAT |
strcat |
STRCHR |
strchr |
STRCMP |
strcmp |
STRCPY |
strcpy |
STRDUP |
strdup |
STRLEN |
strlen |
STRNCPY |
strncpy |
STRSTR |
strstr |
还有很多属于BREW专有的一些助手函数,不过这里没有列举出来,因为它们实在是太多了。由于BREW的字符串处理是以Unicode为基础的,因此除了ASCII字符串助手函数之外,它还提供了一组处理宽字节的字符串处理函数。对应于单字节的助手函数,这些宽字节的助手函数只需要增加一个W就可以了,如WSTRCPY代表宽字节字符的复制函数。在编写程序时,请确认我们的应用程序中使用的是BREW助手函数,而不是C语言的库函数,否则可能引起应用程序在BREW设备上的运行错误或者无端的增加程序的大小。
对于那些已经学习过面向对象(如SmallTalk,C++等)的人来说,需要注意的是BREW没有那些语言的一些特征。例如,BREW中所有的数据类型仅仅是数据类型而已,而不是一个对象。请不要用我们固有的面向对象的思维方式去理解BREW,否则会给我们的编码带来一些麻烦,尤其是在继承这个问题上,BREW的继承不是在语法上的,而是在二进制层面的一种继承。关于这一点在后面的章节中将会有详细的叙述,现在唯一需要注意的是不要用我们以前的知识去理解BREW的面向对象方式。
ps:以上内容来自 《深入BREW开发》 作者:焦玉海