CODE大全
版权声明:本文为博主原创文章,未经博主允许不得转载。

dw2xls使用教程

发布时间:『 2017-06-30 16:29』  博客类别:编程语言  阅读(1101) 评论(0)

简单说下dw2xls,有些人可能没用过。本文将通过demo的形式帮助大家理解它。


这个程序开源了,由于自已一直以来都是用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所修改后的地方:

修改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"

但这样以维护代码时,可能会容易理解错误,所以不建议。

修改n_cst_unicode对象

把OF_Ansi2Unicode函数原来的代码全部屏蔽掉,直接使用pb的内部函数: Return Blob(as_Value)       把OF_Unicode2Ansi函数原来的代码全部屏蔽掉,直接使用pb的内部函数: Return String(a_Value)

修改后运行程序, 一切OK,不会出错所谓的乱码问题.而且可以发现,需要修改的地方很少,修改的代码也非常少。


源程序,源代码下载地址:dw2xls for pb11.5 source code


——— 全文完 ———
如有版权问题,请联系532009913@qq.com。
关键字:   dw2xls     pb11.5     Unicode     PowerBuilder     n_cst_dw2excel  
评论信息
暂无评论
发表评论
验证码: 
Powered by CODE大全 | 鄂ICP备14009759号-2 | 网站留言 Copyright © 2014-2016 CODE大全 版权所有