11007
請問關於資源檔切換問題-VB6
撰寫程式時
可以透過不同的資源檔 *.res
讓程式可以用不同的語言來呈現資料
但是一個 VB 專案當中只能引用一份資源檔
且當中資源的索引不能重複﹙重複就找不到資料啦﹚
但問題是
如果想要在一個程式中切換引用不同的資源檔
VB似乎沒有提供這樣的功能﹙有嗎?如果有請告訴我
因為我沒找到﹚由於 *.res 可能有許多不同的產生方法
但是我想
反正程式最後都是透過解讀 *.res 去取得資源
如果 VB 不提供切換引用的方式
那我就自己去讀 *.res 把資料還原在網路上
我找到了這份資料http://www.moon-soft.com/program/FORMAT/binary/res32.htm詳細地閱讀後
直接用 16 進位的方式開啟某個 .res 檔案
想要印證資料
結果發現
的確資料的組成是以資料的標頭資訊 資料本身組成沒錯
但問題是我無法還原回原本的索引-資料的對應格式在預期當中
一份標頭應該會帶有一份索引資訊﹙我預期是 ResName﹚
對應到一份資料
結果解讀實際檔案後
發現一份ResName 卻對應到不定數量的資料
而且我找不到索引的關聯性
例如 ID=0x02B0對應到實際索引 11000-11007
而 ID=0x02B1卻對應索引 11008-11021
數量不合以外
有些資料前面還加了一堆 0x00
有些卻沒有
0x00的數量看起來不一定
另外檔案前面還有一些是解讀起來不知所云的資料
因此我在想
雖然上面網址的資料看起來沒有錯
但是在資料對應部分
應該還是有我沒搞懂的地方
只是我實在不知道還有哪邊有更進一步的資訊
如果有了解的大大
麻煩指教一二
萬分感謝。
沒人回答
那我就來爛芋頭充當大樹一下
不
是濫竽充數才對VB對我來說已經是陳年往事
這裡只提供大概的作法
細節請自行嘗試吧1.通常不是這樣換
而是 resource 檔案當中可以撰寫多個不同的語言區塊
然後用 SetThreadLocale() 函數指定語言
之後 LoadString() 之類的函數就可以用同樣的 ID 抓到不同的語言。
我忘掉VB的resource編輯器可不可以撰寫多個語言區塊
如果不行可以用其他的編輯器撰寫、編譯res
然後再連結到VB的程式上。
2.如果你有玩eMule
可以觀察他的多語化方式。
eMule底下有一個lang資料夾
裡面有個個語言對應的 DLL。
每個 DLL 都包含了一個獨立的resource
因此只要切換DLL就等於切換resource。
概念類似於hRes = LoadLibrary(