Symbian系统上C工程师需要特别注意的地方

来源:互联网 发布:castep软件下载 编辑:程序博客网 时间:2024/04/29 15:07

下面写点在Symbian系统上C工程师需要特别注意的地方:
(1)首先PC平台和手机平台还是有区别的,虽然手机平台中也支持C语言,移植也不很是麻烦,但要考虑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 StaticData),在有些手机版本中是不支持全局变量的,但可以有全局静态常量,对于全局指针常量注意要这样申明,例如:static constchar*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

  下面有篇不错的贴子介绍给大家。是关于Symbian OS C++中RTTI的实现及原理的。主要是讲移植MFC代码实现RTTI的意义及具本实现过程,写得相当的仔细。这个问题我原来遇到过,对我很有帮助,在这儿分享给大家:http://innovatorsamsungmobile.com/bbs11