Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開始

tag 標(biāo)簽: Access菜鳥邪門武器

相關(guān)帖子

版塊 作者 回復(fù)/查看 最后發(fā)表

沒有相關(guān)內(nèi)容

相關(guān)日志

分享 Access邁向Web化第一步:Res協(xié)議及如何把html編譯成DLL文件
熱度 1 ganlinlao 2015-12-1 18:32
Access邁向web化的第一步:就是解決Res協(xié)議,并且要解決把html文件包編譯成DLL文件。 我在其它文章提過(guò),Webbrowser控件支持Res協(xié)議,在winxp+Access03,win8.1+Access2010,win10+access2016的環(huán)境下都支持。 所以了解Res協(xié)議就變得比較重要了。 IE中RES協(xié)議的詳細(xì)用法: "RES://"協(xié)議是IE 4.0預(yù)定義的一個(gè)協(xié)議,它的具體語(yǔ)法為: RES://resource file /resource id resource file: 含有資源的模塊的文件名,請(qǐng)注意這里的路徑分隔符只能使用“\”,而不能使用“/”。 Resourcetype: 資源類型,它是一個(gè)字符串或數(shù)字。常用的資源類型都對(duì)應(yīng)著一個(gè)數(shù),比如BITMAP對(duì)應(yīng)著RT_BITMAP=2, 這些常數(shù)定義在VC++的WINUSER.H可以找到,如果資源類型是數(shù)字,要在數(shù)字前面加上“#”號(hào)。Resourcetype可以省略, 默認(rèn)為RT_HTML=23,即HTML文件。RT_HTML在VC++ 5.0中沒有定義,但現(xiàn)在已經(jīng)廣泛使用。 Resource id: 資源的ID號(hào)。在這里要注意一個(gè)問題:在VC++中定義資源的時(shí)候,通常是使用數(shù)字常量,比如ID_BITMAP1, 它代表的數(shù)字可能是101。而在使用res://協(xié)議時(shí),不能使用ID_BITMAP1(在DLL中并沒有這個(gè)符號(hào)),而必須使用#101來(lái)代表資源。 例如要顯示一個(gè)位圖資源,其ID號(hào)為101,應(yīng)為RES://mydll.dll/#2/#101。 說(shuō)明1、MSDN上對(duì)res協(xié)議的語(yǔ)法的說(shuō)明中指出,如果路徑中sType和sId是數(shù)字的話,必須在前面冠以’#’ 符,以保證正確, 然而我在裝了SP2的IE6.0中試驗(yàn)的時(shí)候發(fā)現(xiàn),如果把sType和sID前面加上’#’符,會(huì)出現(xiàn)錯(cuò)誤;相反,不加的時(shí)候就完全沒有 問題。 猜想可能是微軟在SP2中更正了res的用法,或者是MSDN出現(xiàn)錯(cuò)誤(這個(gè)可能性似乎不是很大)。不過(guò)我們的應(yīng)用完全可以用字符串來(lái)代替數(shù)字, 所以即便是SP2出現(xiàn)的更正也不影響兼容性。 說(shuō)明2、以”res://d:/test/mydll.dll/2/234”為例,d:/test/mydll.dll 部分,即sFile部分必須是windows格式的路徑, 比如你不能寫成d:/test/mydll.dll的形式。后面sType和sID部分則必須 是’/’的形式,不然會(huì)出問題。 RC文件、Res文件和DLL文件是什么關(guān)系,有什么區(qū)別? 統(tǒng)一資源管理: 在win32編程中,為方便項(xiàng)目中的資源統(tǒng)一管理,提供了一個(gè)格式統(tǒng)一的資源文件,對(duì)各種資源進(jìn)行管理。它的擴(kuò)展名是.rc,在程序編譯時(shí)它會(huì)被資源編譯器編譯生成一個(gè).res的二進(jìn)制文件。 rc文件的語(yǔ)法: 1.注釋: 注釋方式和 C 語(yǔ)言相通,單行注釋用 // 符號(hào),多行注釋用 /* ... */ 符號(hào)。 2. 預(yù)處理命令: 預(yù)處理指令包括一些頭文件的引用(使用 #include ,也同 C 語(yǔ)言)。 3. 編譯指令: 預(yù)定義(#define,常量和宏,不支持帶參數(shù)的宏) 和 條件編譯(#if, #ifdef, #undef, #ifndef, #else, #elif, #endif 等)。 4. 資源定義聲明: 資源定義的聲明中包括“資源”(Resources),"控件"(Controls) 和 “聲明”(Statements) 3 類。 RC文件是文本文件,跟txt沒有什么區(qū)別。Res文件是RC已經(jīng)編譯過(guò)的資源文件,是二進(jìn)制文件。 在了解了Res協(xié)議之后,我們接下來(lái)的問題,就是如何把眾多的html、js、css、各種圖片、flash等文件編譯成一個(gè)dll文件。 開始我還以為是一件很容易的事情,結(jié)果完全讓人大跌眼鏡,非常的痛苦。主要是因?yàn)榫W(wǎng)絡(luò)上的教程非常的少,而且對(duì)這種工具的介紹也是非常的少。我?guī)缀跏悄朕D(zhuǎn)使用了5種以上的工具,才找到適合自己的(而且還是很原始的),如果有誰(shuí)有比較多的這種經(jīng)驗(yàn),可以多分享和介紹一下。 問題點(diǎn)1: html文件的相對(duì)路徑和絕對(duì)路徑如何解決? 一個(gè)html文件常常包含了很多個(gè)js,css文件,這些js和css文件的ref,在網(wǎng)站上是使用相對(duì)路徑。而且在平時(shí)調(diào)試js和html中,也應(yīng)該保持這種相對(duì)路徑。如何在RC文件中解決html引用的相對(duì)路徑,是一個(gè)很大的難點(diǎn)。 在這里,在RC文件中使用默認(rèn)的html類型,還是使用自定義類型,有一些細(xì)節(jié)上的區(qū)別: (1).如果使用了HTML類型, URL中不用寫類型域 ,nameID、typeID中不可以包含"/",但可以用"\",網(wǎng)頁(yè)之中的超鏈接a中要寫"\",原因是URL最終會(huì)合成作為res://的sID字段域,否則res://訪問會(huì)出錯(cuò),而且res://協(xié)議沒有默認(rèn)首頁(yè)這么個(gè)概念,所以也要注意這里和http://訪問時(shí)會(huì)有不同。 (2). 如果使用了自定義的資源,在URL中要把typeID寫上,看上去就像是一個(gè)目錄,你可以在nameID中使用"/",typeID中不要用,"\"幾乎可以自由使用。 自定義類型時(shí)必須在URL中寫明類型域。 如:res://F:\ResDLL_test\release\ResDLL_test.dll/custom/htmlpage/1/1.html 其中custom為sType域,htmlpage/1/1.html為sID域,和資源中的nameID相符。因?yàn)槭亲远x類型為custom,所以Res路徑中custom必須寫上。 在實(shí)際使用中,一般還是使用自定義類型,會(huì)來(lái)得更靈活一些,方便和html文件包的整個(gè)目錄進(jìn)行映射,而無(wú)須改動(dòng)html中的引用。 問題點(diǎn)2: html文件的字符集的選擇。 現(xiàn)在utf-8幾乎是html的統(tǒng)一字符集。而且ajax默認(rèn)也是utf-8字符集。這本來(lái)在網(wǎng)頁(yè)中沒有什么問題,但因?yàn)槲覀兪窃?Access中使用html,vba對(duì)utf-8處理不好,所以一般最好把html文件轉(zhuǎn)成gb2312或ansi格式。小心gbk字符集,這在很多的resource編譯工具,不能正確顯示 html源文件。 問題點(diǎn)3: Res協(xié)議中的幾個(gè)特殊符號(hào)要特別注意 一般Res://文件路徑中包含著特殊符號(hào),ie會(huì)自動(dòng)進(jìn)行轉(zhuǎn)換,這幾個(gè)特殊符號(hào)是:%3A (":"), %5C ("\"), %20 (space) 和 %23 ("#")。 具體在實(shí)際使用中,如果遇到這幾個(gè)特殊符號(hào),你要特別注意。特別是在網(wǎng)頁(yè)中a/a中如果有使用 # ,則要特別留意。 問題點(diǎn)4: 自動(dòng)化處理RC文件映射html文件目錄 如果html文件包有著很多的文件,那么使用vbs之類的腳本來(lái)自動(dòng)化寫RC文件,幾乎是一件必須要考慮的事情。畢竟寫RC文件是一件很繁瑣 的事情。 RC文件定義如下: 基本語(yǔ)法: nameID typeID filename nameID typeID { raw-data } 一個(gè)完整的RC文件如下: #define VERINFO 1 /* 版本信息 1 */ #define GIF 2110 /* 自定義類型編號(hào)要求 ( 255) */ HOME HTML DISCARDABLE "Home.htm" /*discardable參數(shù)是指不用在內(nèi)存中常駐。*/ ABOUT HTML DISCARDABLE "About.htm" Dot.gif GIF "Dot.gif" BG.gif GIF "BG.gif" 接下來(lái)這段意義不大,主要用于版本信息: /* Begin Version Info Block. The Main Block Information can be retrieved through GetFileVersionInfo API */ VERINFO VERSIONINFO FILEVERSION 1,0,0,0 /* VS_VERSIONINFO : File version Bytes */ PRODUCTVERSION 1,0,0,0 FILEFLAGSMASK 0x3fL /* Mask for valid members of FILEFLAGS */ FILEFLAGS 0x0L FILEOS 0x10004L /* VOS_DOS_WINDOWS32 */ FILETYPE 0x1L /* VFT_APP = Application */ FILESUBTYPE 0x0L /* Who knows */ /* This is the Block that appears in the File Properties Dialog */ BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" /* English : 0409 and Character Set : 1200 : Unicode */ BEGIN VALUE "Comments", "This file is used as the Resource file for resHTML project at http:\\\\eswar_santhosh.tripod.com \0" VALUE "CompanyName", "C. Eswar Santhosh\0" VALUE "FileDescription", "ResHTML Application Resource DLL\0" VALUE "FileVersion", "1.00\0" VALUE "InternalName", "rcHTML\0" VALUE "LegalCopyright", "Copyright ?C. Eswar Santhosh, 2000\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "rcHTML.dll\0" VALUE "ProductName", "ResHTML\0" VALUE "ProductVersion", "1.00\0" /* Additional Values can be added here */ VALUE "Web Site", "http:\\\\eswar_santhosh.tripod.com\0" VALUE "Mail", "eswar_santhosh@yahoo.com" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END /* End Version Info Block */ 二、 使用什么工具編譯dll? 1、菜鳥級(jí)工具:vb6 一般來(lái)說(shuō),常寫vba代碼,最好安裝一下vb6。因?yàn)椴粫r(shí)會(huì)用得到它。這里用的是vb6的資源編輯器RC.exe。 vb6的資源編輯器添加的資源文件是res格式,也就是已經(jīng)編譯好的二進(jìn)制文件,這沒關(guān)系,因?yàn)檫@是第一步而已,只不過(guò)因?yàn)樗容^簡(jiǎn)單易用,而且大家也會(huì)比較熟悉。 Rc.exe編輯完res文件之后,另存為一個(gè)單獨(dú)的res格式文件。 2、必須要用到的工具ResEdit1.66,這是一個(gè)開源免費(fèi)的resource編輯工具,自帶了編譯器。網(wǎng)絡(luò)上很容易下載得到(中文版),有32/64位版,我們一般用32位版ResEdit。ResEdit是專門為c/c++用的資源編輯器。所以不要用它來(lái)新建Rc文件,因?yàn)樗陆ǖ腞c文件,編譯成dll,不符合Res協(xié)議。 把vb6的RC.exe編輯完的res格式文件,用ResEdit打開,然后另存為一個(gè)dll文件,這樣就是一個(gè)純資源的DLL文件,完全符合Res協(xié)議使用。 如果你不想安裝vb6。那也可以隨便按照上面的格式,寫一個(gè)Rc文件模板,然后用ResEdit打開,開始添加資源,然后編譯成dll也可以。
個(gè)人分類: access入門|3007 次閱讀|1 個(gè)評(píng)論

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-13 07:55 , Processed in 0.057654 second(s), 13 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部