Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12826
  • 博文数量: 4
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-10 17:37
文章分类

全部博文(4)

文章存档

2015年(4)

我的朋友

分类: C/C++

2015-06-10 19:34:16

minigui中值得借鉴的对用户隐藏函数接口的方式

文章来源:http://gliethttp.cublog.cn

如果你不小心,以后的哪一天也想写一个东东,让别人用,且希望用户使用时,接口尽量简明,
那么minigui中使用的如下隐藏接口函数的方式,值得借鉴.
//1.宏定义libminigui-str-1.6.2/include/minigui.h
#define MiniGUIMain \
MiniGUIAppMain (int args, const char* argv[]); \
int main_entry (int args, const char* argv[]) \
{ \
    int iRet = 0; \
    if (InitGUI (args, argv) != 0) { \
        return 1; \
    } \
    iRet = MiniGUIAppMain (args, argv); \
    TerminateGUI (iRet); \
    return iRet; \
} \
int MiniGUIAppMain
//2.用户应用程序,必须放在MiniGUIMain函数体内,实际在minigui系统中
//存放用户应用程序函数名称是MiniGUIAppMain,这样真正执行MiniGUIAppMain用户程序之前的相当大空间
//就可以由你自己发挥了,用户进入环境之前的GAL、IAL等所有与自身系统相关,用户不必关心的东东,都可以
//隐藏起来了,MiniGUIAppMain()用户程序执行完成之后,又可以由你自己执行用户并不关心的系统回收操作等.
int MiniGUIMain(int args, const char* arg[])
{//用户设计的应用程序体部分
    TestMyWindow(NULL);
    return 0;
}
//将MiniGUIMain宏展开之后,就可以清楚minigui的隐藏方式了
int MiniGUIAppMain (int args, const char* argv[]);
int main_entry (int args, const char* argv[])
{
    int iRet = 0;
    if (InitGUI (args, argv) != 0) {
        return 1;
    }
    iRet = MiniGUIAppMain(args, argv);
    TerminateGUI (iRet);
    return iRet;
}
int MiniGUIAppMain(int args, const char* arg[])
{//用户设计的应用程序体部分
    TestMyWindow(NULL);
    return 0;
}
//所以main_entry是minigui系统经过库启动之后最终执行的入口函数,该函数
//首先InitGUI()建立用户应用程序使用minigui的软、硬环境,
//之后执行被替换了函数名的放在新函数名MiniGUIAppMain()之下用户自己的程序
//用户程序退出之后,再由minigui系统执行GUI系统的清理工作TerminateGUI();
//我感觉这种“加个塞儿”的方式很好的给用户提供单一入口函数的同时,又很好的隐藏了
//minigui为了自身能够工作所必须要初始化的繁杂软硬件细节,
//这些细节只和minigui系统运行自己有关,用户并不关心
//这和linux下的名称替换宏module_init()有些类似,
//具体分析见[http://gliethttp.cublog.cn]

//《非编译到kernel中的驱动程序为什么非要定义:__attribute__((alias(#x)))别名问题》

阅读(1137) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:嵌入式Linux的MiniGUI研究

给主人留下些什么吧!~~