dw2xls已升级至pb11.5
生活随笔
收集整理的這篇文章主要介紹了
dw2xls已升级至pb11.5
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
dw2xls已經開發了好幾年了,最近也把這個程序開源了,由于自已一直以來都是用pb9開發程序,還沒有升級到更高的版本,所以一直都沒去升級這個程序.這兩年經常會收到一些朋友的來信,詢問如何把dw2xls升級到pb10或以上更高的版本,甚至部分用反編譯程序的朋友,為了這個功能,都愿意付費購買.考慮到一些朋友在升級過程中,還是會碰過一些困難,為了方便大家,所以決定還是自已把程序升級到pb11.5,并提供給大家下載.如果使用pb10, pb10.5, pb11版本的朋友,請使用開發工具直接進行升級,然后再把附件中的n_cst_unicode.sru, n_cst_dw2excel.sru兩個文件,導入到dw2xls.pbl文件即可.
???????在這里,隨便說一下pb10以下版本的程序,如果升級到pb10以上版本,需要注意的地方:
???????PB10以下版本的程序,字符串使用的ANSI編碼,pb10或以上版本,使用的是Unicode編碼,所以在API函數定義上,會有些出入.大部分在參數或返回值中使用了字符串的Windows API函數,都提供了兩個版本的API,一個是支持ANSI的,一般在函數后面加個A作為標記,一個是支持Unicode的,一般在函數后面加W(WideChar)作為標記.如GetWindowTextA和GetWindowTextW,所以在pb9時,定義API函數一般使用的是ANSI版本(因為PB9使用的是ANSI編碼),如果是升級到PB10或以后版本,則可以把API函數定義為使用Unicode版本即可,而不是使用PB程序直接升級的那樣,繼續采用Ansi版本.
??????此外,PB在定義Windows Api時,大小寫是敏感的,這個跟PBScript不同,也是需要注意的地方.
??????PB9新增加了兩個函數 TOAnsi 和ToUnicode,分別可以把字符串轉換為Uncicode編碼的Blob類型的數據,或把Uncicode編碼類型的Blob數量,轉換為使用Ansi的字符串.而pb11.5,這兩個函數在使用的時,提示該函數在以后的版本可能不支持,所以不直接使用.PB 11.5使用String和Blob函數進行字符串編碼數據類型的轉換,并且可以指定字符編碼的類型.
??????通過以上分析可以發現,如果在pb11.5中,把API函數定義為使用Ansi版本的話,操作是比較麻煩的,可能會涉及到字符串數據類型的轉換,而如果定義為直接使用Unicode版本,則方便很多.
??????附注: dw2xls從pb9升級到pb11.5所修改后的地方:
??????1.修改n_cst_dw2excel中Local External Function以下兩上Api函數的定義,直接使用Unicode版本
??????Function boolean GetTextExtentPoint32A(ulong hdcr, string lpString, long nCount, ref os_size size) Library "GDI32.DLL"
FUNCTION ulong GetLocaleInfo(ulong Locale,ulong LCType,ref string lpLCData,ulong cchData) LIBRARY "kernel32.dll" ALIAS FOR "GetLocaleInfoA"?
??????更改后:
??????Function boolean GetTextExtentPoint32W(ulong hdcr, string lpString, long nCount, ref os_size size) Library "GDI32.DLL"?
??????FUNCTION ulong GetLocaleInfo(ulong Locale,ulong LCType,ref string lpLCData,ulong cchData) LIBRARY "kernel32.dll" ALIAS FOR "GetLocaleInfoW"?
??????其中:GetTextExtentPoint32W的名稱與原來的定義不同,所以同時修改了代碼中使用到該Api的地方.如果不想修改代碼,可以直接把API改為:
???????Function boolean GetTextExtentPoint32A(ulong hdcr, string lpString, long nCount, ref os_size size) Library "GDI32.DLL"?Alias For "GetTextExtentPoint32W"
??????但這樣以維護代碼時,可能會容易理解錯誤,所以不建議.
??????2.修改n_cst_unicode對象
?????? 把OF_Ansi2Unicode函數原來的代碼全部屏蔽掉,直接使用pb的內部函數: Return Blob(as_Value)
?????? 把OF_Unicode2Ansi函數原來的代碼全部屏蔽掉,直接使用pb的內部函數: Return String(a_Value)
????
??????修改后運行程序, 一切OK,不會出錯所謂的亂碼問題.而且可以發現,需要修改的地方很少,修改的代碼也非常少.
???????需要的朋友,可從這里下載 dw2xls for pb11.5 source code
總結
以上是生活随笔為你收集整理的dw2xls已升级至pb11.5的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2521):设定添加博客和最终
- 下一篇: 工作168:代码中的删除逻辑处理