stardict的main函式 – Part1

step1.先設定gStarDictDataDir,用set_data_dir()

step2.GETTEXT_PACKAGE在win32intl.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;

        }

感謝你看到這裡,很快就可以離開了,但最好的獎勵行動就是按一下幫我分享或留言,感恩喔~

點我分享到Facebook

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *