static void set_data_dir()
{
//set gStarDictDataDir;
#ifdef _WIN32
HMODULE hmod;
if ((hmod = GetModuleHandle(NULL))==0) //取得目前 process的載入位址
exit(EXIT_FAILURE);
char tmp_buf[256];
if (GetModuleFileName(hmod, tmp_buf, sizeof(tmp_buf))==0)
exit(EXIT_FAILURE);
gchar* buf = g_path_get_dirname(tmp_buf);
gStarDictDataDir=buf;
g_free(buf);
#else
gStarDictDataDir = STARDICT_DATA_DIR;
#endif
}
GetModuleHandle是Windows API的函式,函式庫是kernel32.dll,用來由模組名稱得到該模組的頭銜
GetModuleFileName也是Windows API的函式,函式庫是kernel32.dll,用來從已載入的模組得知該可執行檔的檔名及完整路徑
g_path_get_dirname是Glib函式庫裡雜項的實用函式,功能是取得取得檔案名稱的目錄部份。
g_free是釋放指向buf的記憶體。
這個函式的功能就是設定gStarDictDataDir的目錄,在Windows下我測到是指向C:Program FilesStarDict,因為StarDict就是安裝在這裡!