Symbian 是应用于高端手机(智能手机)上的一种操作系统,诺基亚、索爱的高端手机便是基于 Symbian 操作系统的, Symbian OS 的优势在于其高稳定性和节能性,并且有众多主流手机产商的支持,现在是高端手机上的主流操作系统之一。在 Synbian OS 上的应用开发主要是以 C ++语言为主,但是也支持 C 语言的程序,把原有的 C 语言工程移植到 Symbian OS 上也是很容易的,其方法有如下几点:
1、 首先要考虑 C 语言和 C ++语言的混合编程问题,因为在 UI 层肯定是要以 C ++语言来设计的, UI 层中的代码无法被移植,必须结合平台上的 UI 设计方法来设计,而 UI 层中要实现的功能可以用 C 语言来实现,所以要考虑好哪些应该用 C ++来设计,哪些应该用 C 语言来设计,如果出现 C 语言中的代码调用 C ++中的代码(这种情况应该尽量避免),则该 C 语言的代码必须用 C ++来编译,用 C ++来编译的文件名最好以“ CPP ”为扩展名,在 C++ 中引用 C 的代码是最好加上“ extern “C” {} ”,在用 C 编译的头文件中要有这样的修饰:
#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus}
#endif
;
2、 在程序退出之前要调用 CloseSTDLIB() ,以释放所有缓冲,该函数在“ reent.h ”文件中;
3、 在 MMP 文件中要加入“ estlib.lib ”,该 LIB 库是 C 标准语言的 LIB 库;
4、 Symbian 中的 STDLIB 并没有完全实现 POSIX 的全部标准,所以有些 C 库的函数要自己实现或用其它方法来替代;
5、 在 C 语言工程中最好不要有可写的全局静态变量( Global Writeable Static Data ),在有些手机版本中是不支持全局变量的,但可以有全局静态常量,对于全局指针常量注意要这样申明,例如: static const char* const ,即要有两个“ const ”。如果有出现全局静态变量或静态常量,则在 MMP 文件中要加入“ EPOCALLOWDLLDATA ”标识,否则会出现编译错误。对于可写的全局静态变量有种处理方法是把所有全局变量放到一个 STRUCT 结构中,然后这个结构的指针用 Dll::SetTls() 和 Dll::Tls() 来存取,存在的问题是用 C 编译的代码中无法调用 C ++的这种方法,还有一种最笨的处理方法是把指针的值存入一个文件中;
6、 在 C ++与 C 的交互接口中会存在如 char* 与 TdesC 之间的转换,可以这样转换,例如:
把 TDesC 转换成 char* :
HBufC8* utf8TempText = HBufC8::NewLC(STRING_LENGTH);
TPtr8 utf8Text(utf8TempText->Des());
CnvUtfConverter::ConvertFromUnicodeToUtf8(utf8Text,TDesCString);
Char* cString = (char*)utf8Text.Ptr();
把 char* 转换成 TPtr :
TPtr8 utf8Text((TText8*)cString,strlen(cString),strlen(cString));
HBufC* ucs2TempText = HBufC::NewLC(utf8Text.Length()*2);
TPtr ucs2Text(ucs2TempText->Des());
CnvUtfConverter::ConvertToUnicodeFromUtf8(ucs2Text,utf8Text);

Symbian OS是一种应用于高端智能手机的操作系统,以其高稳定性和节能性著称。本文介绍了如何将C语言程序移植到Symbian OS上,包括解决C/C++混合编程问题、内存管理和数据类型转换等关键步骤。
855

被折叠的 条评论
为什么被折叠?



