stardict的main函式 – Part1

step1.先设定gStarDictDataDir,用set_data_dir()

step2.GETTEXT_PACKAGE在win32\intl.h的标头档中定义#define GETTEXT_PACKAGE "stardict",gStarDictDataDir是step1中设定的,G_DIR_SEPARATOR_S是目录分隔符号,c_str()将string物件转会成C语言形式的字串常数,STARDICT_LOCALEDIR这是在Makefile.am中定义好的
-DSTARDICT_LOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\"    \,bindtextdomain函式用于指定包含不同语言域名的讯息目录。

bind_textdomain_codeset用来指定讯息目录的domainname域名之输出字元集

get_user_config_dir()就字面上来看,应该是取得使用者设定路径。在utils.cpp中有函式定义,我们另外开一篇文章来说明。

std::string userdir(get_user_config_dir());这个userdir跟下一行的userdir.c_str(),我有点不懂这是干嘛的?

后来查到这个好像是How to convert Cstring to string的一种用法,看来我对C++真的是很浅喔!

c_str的用法,参考标准 C++ 类别的成员函式 c_str()

g_file_test、g_mkdir参考GLib参考手册File Utilities

S_IRWXU定义在sys/stat.h里,值是_S_IRWXU,而_S_IRWXU定义是(_S_IREAD | _S_IWRITE | _S_IEXEC),另外这三个常数的定义是这样:

#define    _S_IEXEC    0x0040
#define    _S_IWRITE    0x0080
#define    _S_IREAD    0x0100

g_warning参考GLib核心应用支援g_warning

g_thread_init参考GLib核心应用支援g_thread_init

#if defined(_WIN32) || defined(CONFIG_GTK) || defined(CONFIG_MAEMO)这一行的定义,我找不太到,但是MAEMO可能是基于 Linux Debian系统平台,由诺基亚公司为了智慧型手机Internet Tablet所开发的有关。

gtk_set_locale的使用可以参考[GTK+]hello范例,说明可以看参考手册gtk_set_locale

gtk_init参考GTK+参考手册 » GTK+核心参考 » 主回圈跟事件的gtk_init

#ifdef CONFIG_GPE
    if (gpe_application_init (&argc, &argv) == FALSE)
        exit (1);
#endif

在了解上面这几行程式之前,大家可能需要先了解什么是GPE,才能知道这个函式的功能,GPE掌上电脑环境, GPE Palmtop Environment 是一个计划为执行Linux作业系统的PDA等掌上装置提供自由图形使用者介面的项目。GPE并不是一个单一的软体,但可以为执行Linux的掌上装置提供如个人资讯管理系统 (PIM)、音乐播放、电子邮件及网页浏览等功能。看起来它是执行在Linux上的,支援的装置有

以下平台上的嵌入式Linux发行版捆绑了GPE:

看起来这几台并不是我喜欢的,所以我应该不会再去添购这些手机,我的重点还是想在Android、Symbian或Windows Mobile之类的系统上开发,所以以后stardict要移植到这一类的系统上,少不了又要一场混战,或许将GPE移到Android上也是可行的吧,都一样是Linux的系统,再看看吧!

gpe_application_init这个函式的使用如下:

#include <gpe/init.h>

extern gboolean gpe_application_init (int *argc, char **argv[]);

它是直接用来取代gtk_init的,它会呼叫gtk_init跟 gtk_set_locale,建立~/.gpe目录,初始化内部需要的模组,假如初始化成功传回TRUE,另外你在编译连结的时候,要使用-lgpewidget到你的link命令中。

g_log_set_handler参考GLib参考手册 » GLib核心应用支援 » 讯息纪录

g_set_print_handler参考GLib参考手册 » GLib核心应用支援 » 讯息输出跟除错函式

GOptionContext参考GLib参考手册 » GLib实用函式集 » Commandline option parser

g_option_context_new参考GLib参考手册 » GLib实用函式集 » Commandline option parser

g_locale_from_utf8…这一篇从2010/03/11写来,历经了7个月了,很多函式中译都慢慢地在补齐,过程是个很漫长的路程,今天因为这个函式,找到了stardict2.4.8的main函数简要说明与注释这一篇,总算有直接可以跳的方式,可以来帮助了解研究stardict这只程式,我把它繁体化,并且过滤掉行号,把目前新版有用的程式码转贴到下面,并以part1告一段落,供大家研究:

Stardict的入口函式main函式在stardict.cpp的1654行(目前版本在2426),这个函式涉及到跨平台、软体国际化及CORBA的C/S模式,以下是其简要说明和注释:

// 将utf8字串转换为系统环境的编码方式

gchar *title=g_locale_from_utf8(_("StarDict"), -1, NULL, NULL, NULL);

HWND ll_winhandle = FindWindowA(0, title); // 查询StarDict程序是否已执行

g_free(title);

if (ll_winhandle > 0) {

            if (IsIconic(ll_winhandle)) // 判断视窗是否最小化

                            ShowWindow(ll_winhandle,SW_RESTORE); //从任务里恢复视窗显示

                    else

                            SetForegroundWindow(ll_winhandle); // 启用该视窗

                    return EXIT_SUCCESS;

        }