Stark Wong 的個人開發網站 | |||||||||||||||||||||
|
|||||||||||||||||||||
此頁面:更新於 2023 年 8 月 7 日 23 時 21 分 33 秒,頁面處理需時 0.0015 秒 | |||||||||||||||||||||
網站內容版權所有(C)Stark Wong。頁面(不包括檔案)可自由連結。網站系統版本 1.90-AngularJSBase (2015/9/27) | |||||||||||||||||||||
網站地圖 |
上次發佈的 MangaMeeya 插件雖然可以開啟含純 Unicode 字元的檔案,但對於含純 Unicode 字元的目錄則無法開啟,這次的插件更新就是針對這個問題。
這次的更新與上次對比加了一些特別的處理,首先是因為程式會使用 FindFirstFileA 來尋找目錄中的檔案,而轉至 FindFirstFileW 後的傳回資料類型是 WIN32_FIND_DATAW 而不是 WIN32_FIND_DATAA,所以傳回給 MangaMeeya 前要建立一個假的 WIN32_FIND_DATAA 並把 Wide Char 版本的傳回資料複製一次 (當然檔案名稱部份如果有純 Unicode 字元則會改成 ?),但這樣會有一個問題,就是建立 WIN32_FIND_DATAA 需要用 LocalAlloc 分配記憶體,而分配後的記憶體需要用 LocalFree 釋放,否則會導致 Memory Leak,那就需要一個存放 hFind 與 WIN32_FIND_DATAA 對應的東西。這個的解決方法很簡單,我加了一個很簡單的 Linked List,這樣就可以靈活地儲存未知上限的項目。
另外一個特別處理就是在含純 Unicode 字元的目錄裡每開啟一個檔案都需要先尋找目錄本身的 Wide Char 版本,那就會產生很多重覆的呼叫。要解決這個問題我也用相同的方法,就是透過建立 Linked List 來存放 ANSI 與 Wide Char 版目錄名稱的連結,所以每當開啟檔案時先把目錄段在 Linked List 找一下,如果找到的話用 CopyMemory 直接替換該部份 (由於替換前有 ? 號的字串跟替換後的字串是相同長度,所以可以直接替換) 即可。
更新版本的插件可於 https://github.com/starkwong/MangaMeeya_Unicode/releases/tag/1.1 下載。