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(

arrow
arrow

    11001 發表在 痞客邦 留言(0) 人氣()