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 Files\StarDict,因为StarDict就是安装在这里!