我们知道,一般C语言的入口都是main,那么MiniGUIMain函数怎么成为入口呢?
其中main_entry,在linux 直接被定义为main, 但是,当_USE_MINIGUIENTRY被定义后,它被定义为minigui_entry:
定义minigui_entry可以用在一些RTOS系统上,如vxworks上。因为它们的入口不是从main开始的。
InitGUI的实现,有多个版本,在线程版中,是在src/kernal/init.c中实现的。我们重点考察这一部分:(删除了一些不重要的部分)
在MiniGUI源码include/minigui.h中,定义了宏
[cpp]
view plain
copy
- #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
其中main_entry,在linux 直接被定义为main, 但是,当_USE_MINIGUIENTRY被定义后,它被定义为minigui_entry:
[cpp]
view plain
copy
- #ifdef
_USE_MINIGUIENTRY -
#define main_entry minigui_entry -
int minigui_entry (int args, const char* arg[]); - #else
-
#define main_entry main - #endif
定义minigui_entry可以用在一些RTOS系统上,如vxworks上。因为它们的入口不是从main开始的。
上面我们的程序,就被展开。可以看到,其中最最要的是InitGUI和TerminateGUI两个函数。
InitGUI函数时主要的初始化函数,我们详细分析下该函数。
InitGUI就定义在minigui.h中,它的原型是:
[cpp]
view plain
copy
- MG_EXPORT
int GUIAPI InitGUI (int, const char **);
InitGUI的实现,有多个版本,在线程版中,是在src/kernal/init.c中实现的。我们重点考察这一部分:(删除了一些不重要的部分)
[cpp]
view plain
copy
- int
GUIAPI InitGUI (int args, const char *agr[]) - {
-
int step = 0; - .......
-
if (!mg_InitFixStr ()) { //初始化字符串管理内存。MiniGUI在内部实现一个字符串的内存管理器,可以加快分配速度,减少内存碎片 -
fprintf (stderr, "KERNEL>InitGUI: Init Fixed String module failure!\n"); -
return step; -
} -
-
step++; -
-
if (!mg_InitMisc ()) { //初始化杂项,主要是加载MiniGUI.cfg文件,后面的很多操作,都依赖于MiniGUI.cfg中的配置 -
fprintf (stderr, "KERNEL>InitGUI: Initialization of misc things failure!\n"); -
r