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)))别名问题》
|