标准C程序symbian编译总结(1)
2009-03-04 14:01
239 查看
内核SYMBIAN编译总结
1 无需按照symbian的命名规范来,包括数据类型,只需要按照标准的C来就可以。
即:short 无需非要用 Tint16;
2 包含的头文件,也仅需标准C的库文件,无需其他头symbian特定文件。需要在mmp文件中指定标准C库:
SYSTEMINCLUDE /epoc32/include /epoc32/include/libc/
LIBRARY euser.lib estlib.lib
另外需要在退出dll的函数中调用一次:
#ifdef SYMBIAN_OS
CloseSTDLIB();
#endif
3 导出函数定义:一般先定义宏:
#define SYMBIAN_OS
#ifdef SYMBIAN_OS
#define API_IMPORT IMPORT_C
#define API_EXPORT EXPORT_C
#elif defined(WINDOWS)
#define API_IMPORT __declspec(dllimport)
#define API_EXPORT __declspec(dllexport)
#else
#define API_IMPORT
#define API_EXPORT
#endif
其实在WINDOWS平台我们无需定义,我们可以使用DEF文件。这样我们可以定义如下形式:
#ifdef SYMBIAN_OS
#define API_IMPORT IMPORT_C
#define API_EXPORT EXPORT_C
#else
#define API_IMPORT
#define API_EXPORT
#endif
在头文件中声明导出函数使用API_IMPORT 一般头文件都要在(例如:my.h)
#ifdef __cplusplus
extern “C”
{
#endif
API_IMPORT void Fun1();
API_IMPORT int Fun2();
#ifdef __cplusplus
}
#endif
带有色彩部分的代码对所有平台都使用,声明为导出是C的函数;
在实现文件中定义导出函数使用API_EXPORT
#include “my.h”
API_EXPORT void Fun1()
{
………
}
4 Symbian OS 有的采用了EKA2,那么该内核支持全局变量,称为global WSD(Writable Static Data). 如果是其他版本,则需要采用没有全局变量的形式,采用TLS形式:
4.1 定义一个全局的数据结构;
typedef struct
{
CSuspectImgArray *pSuspectImgArray ;
SLINEINFO *pGlobalCurLine;
SWORDINFO *pGlobalCurWord;
TInt32 nSplitNum;
BOOL bInitFlag ;
SEEDDICT SeedDict[MAXLANG];
TInt32 g_nLangNum; //recognition Language count
SELFDICT SelfDict;
} TGlobalData;
4.2 初始化函数中加上;
TGlobalData* pD;
pD = (TGlobalData*)new TGlobalData;//申请内存分配
if( !pD )return STATUS_NO_ENOUGH_RAM;
//设置thread local storage
if(Dll::SetTls(pD) != KErrNone)
{//主线程
delete pD;
return STATUS_FAILED;
}
4.3 使用函数中
#ifdef SYMBIAN
TGlobalData* pD = (TGlobalData*)Dll::Tls();
if ( !pD )
return 0;
#endif
g_GlobalImg = pWordImg;
其中定义(也可以不这样定义,直接访问,之所以这样定义,是为了跟没有使用TLS的C程序好兼容,无需修改):
#define g_GlobalImg pD->g_GlobalImg
4.4 最后释放函数
delete (TGlobalData*)Dll::Tls();
Dll::SetTls(NULL);
1 无需按照symbian的命名规范来,包括数据类型,只需要按照标准的C来就可以。
即:short 无需非要用 Tint16;
2 包含的头文件,也仅需标准C的库文件,无需其他头symbian特定文件。需要在mmp文件中指定标准C库:
SYSTEMINCLUDE /epoc32/include /epoc32/include/libc/
LIBRARY euser.lib estlib.lib
另外需要在退出dll的函数中调用一次:
#ifdef SYMBIAN_OS
CloseSTDLIB();
#endif
3 导出函数定义:一般先定义宏:
#define SYMBIAN_OS
#ifdef SYMBIAN_OS
#define API_IMPORT IMPORT_C
#define API_EXPORT EXPORT_C
#elif defined(WINDOWS)
#define API_IMPORT __declspec(dllimport)
#define API_EXPORT __declspec(dllexport)
#else
#define API_IMPORT
#define API_EXPORT
#endif
其实在WINDOWS平台我们无需定义,我们可以使用DEF文件。这样我们可以定义如下形式:
#ifdef SYMBIAN_OS
#define API_IMPORT IMPORT_C
#define API_EXPORT EXPORT_C
#else
#define API_IMPORT
#define API_EXPORT
#endif
在头文件中声明导出函数使用API_IMPORT 一般头文件都要在(例如:my.h)
#ifdef __cplusplus
extern “C”
{
#endif
API_IMPORT void Fun1();
API_IMPORT int Fun2();
#ifdef __cplusplus
}
#endif
带有色彩部分的代码对所有平台都使用,声明为导出是C的函数;
在实现文件中定义导出函数使用API_EXPORT
#include “my.h”
API_EXPORT void Fun1()
{
………
}
4 Symbian OS 有的采用了EKA2,那么该内核支持全局变量,称为global WSD(Writable Static Data). 如果是其他版本,则需要采用没有全局变量的形式,采用TLS形式:
4.1 定义一个全局的数据结构;
typedef struct
{
CSuspectImgArray *pSuspectImgArray ;
SLINEINFO *pGlobalCurLine;
SWORDINFO *pGlobalCurWord;
TInt32 nSplitNum;
BOOL bInitFlag ;
SEEDDICT SeedDict[MAXLANG];
TInt32 g_nLangNum; //recognition Language count
SELFDICT SelfDict;
} TGlobalData;
4.2 初始化函数中加上;
TGlobalData* pD;
pD = (TGlobalData*)new TGlobalData;//申请内存分配
if( !pD )return STATUS_NO_ENOUGH_RAM;
//设置thread local storage
if(Dll::SetTls(pD) != KErrNone)
{//主线程
delete pD;
return STATUS_FAILED;
}
4.3 使用函数中
#ifdef SYMBIAN
TGlobalData* pD = (TGlobalData*)Dll::Tls();
if ( !pD )
return 0;
#endif
g_GlobalImg = pWordImg;
其中定义(也可以不这样定义,直接访问,之所以这样定义,是为了跟没有使用TLS的C程序好兼容,无需修改):
#define g_GlobalImg pD->g_GlobalImg
4.4 最后释放函数
delete (TGlobalData*)Dll::Tls();
Dll::SetTls(NULL);
相关文章推荐
- 命令行下编译Symbian程序环境配置总结
- 腾讯笔试题总结--C程序编译过程
- 今天用VS2005编译DirectShow程序,一些莫名其妙的问题总结
- s60 5版程序在symbian 3适配,升级,编译
- 命令行下编译Symbian程序
- C/C++程序编译链接接过程总结
- VS2005下编译调试保护模式32位汇编程序总结
- 程序编译、链接总结
- Win32汇编编译程序总结
- 1014 对编译程序的心得与总结
- vc6 在win10上编译x64程序的问题总结
- 关于C++编译的程序无法在新一台电脑上运行总结
- 【自己总结】Sublime2编译Python程序EOFError:EOF when reading a line解决方法
- s60 5版程序在symbian 3适配,升级,编译
- VC6.0 编译的程序 转换成 VS2010后,编译出错问题解决方法的总结
- Windows系统下用命令行编译C/C++程序过程总结
- 编译64位程序的总结和理解
- CLR学习总结之C#程序的编译与执行
- [图解]Symbian 编程总结-工具与扩展-让Symbian SDK使用最新的GCCE进行编译
- c++程序编译过程总结(个人理解)