祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 21141|回复: 15

[PB10-15.X] 黄国酬-dw2xls已升级至pb11.5

[复制链接]

[PB10-15.X] 黄国酬-dw2xls已升级至pb11.5

[复制链接]
ehxz

主题

0

回帖

57万

积分

管理员

积分
570604
贡献
在线时间
小时
2009-7-29 11:11:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
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_pb115.rar (391.88 KB, 下载次数: 369)
FROM:http://www.cnblogs.com/huanggc/archive/2009/07/29/1533583.html
作者:黄国酬
对于GRID型的数据窗口,默认是用Formula one 控件转换为EXCEL的,也可以不用,不用时,需要将程序中的n_cst_dw2excel中的of_dw2excel函数中的下面行中注释掉:
/*-------------------------------------------------------------------------------*/
//如果是Grid形式的数据窗口,则采用Formula one的版本进行导入
//使用F1导出的效率较高,但格式与采用原来的方式会有些不同
//所以根据实际需要看是否需要该功能,否自已在代码中增加相应的输出选项
//IF adw.Describe("DataWindow.Processing")="1" Then
//        n_cst_dw2Excel_Grid   n_dw2xls
//        n_dw2xls.is_TipsWindow = this.is_TipsWindow
//        n_dw2xls.is_OpenParm = this.is_OpenParm
//        Return n_dw2xls.OF_dw2Excel(adw,as_FileName)
//END IF
/*-------------------------------------------------------------------------------*/
如果需要用F1控件的,也可以,那需要注册F1控件,注意,程序版本中使用的是6.1版,不是6.0版本。
w_tipsabc 与 d_wait 一定要保留着
共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
zjyh168

主题

0

回帖

85

积分

注册会员

积分
85
贡献
在线时间
小时
2009-8-23 17:09:21 | 显示全部楼层
非常感谢。。。。
共享共进共赢Sharing And Win-win Results
yeguozhi

主题

0

回帖

52

积分

注册会员

积分
52
贡献
在线时间
小时
2009-9-28 15:47:10 | 显示全部楼层
谢谢分享!
共享共进共赢Sharing And Win-win Results
jamesqhl

主题

0

回帖

162

积分

中级会员

积分
162
贡献
在线时间
小时
2009-11-4 16:56:36 | 显示全部楼层
thank you very much
共享共进共赢Sharing And Win-win Results
qianhuhui

主题

0

回帖

267

积分

中级会员

积分
267
贡献
在线时间
小时
2009-11-21 13:44:14 | 显示全部楼层
终于找到你了:dw2xls!谢谢非常感谢,不过我的pb6.5能否使用?
共享共进共赢Sharing And Win-win Results
CYM168

主题

0

回帖

214

积分

注册会员

积分
214
贡献
在线时间
小时
2012-12-12 01:03:56 | 显示全部楼层
收藏一下备用
共享共进共赢Sharing And Win-win Results
838637819

主题

0

回帖

337

积分

高级会员

积分
337
贡献
在线时间
小时
2012-12-29 11:50:01 | 显示全部楼层
非常感谢。。。。
共享共进共赢Sharing And Win-win Results
american

主题

0

回帖

274

积分

中级会员

积分
274
贡献
在线时间
小时
2015-6-5 14:56:07 | 显示全部楼层
下载看看,谢谢!
共享共进共赢Sharing And Win-win Results
oriflame

主题

0

回帖

307

积分

中级会员

积分
307
贡献
在线时间
小时
2015-7-4 08:38:53 | 显示全部楼层
DW2XLS的PB10.x及11.X版本
共享共进共赢Sharing And Win-win Results
bwwdlm

主题

0

回帖

284

积分

中级会员

积分
284
贡献
在线时间
小时
2015-11-26 09:50:48 | 显示全部楼层
非常感谢 看看学习学习
共享共进共赢Sharing And Win-win Results
xiao_r888

主题

0

回帖

303

积分

注册会员

积分
303
贡献
在线时间
小时
2020-3-4 15:31:22 | 显示全部楼层

thank you very much
共享共进共赢Sharing And Win-win Results
hzzyca

主题

0

回帖

273

积分

注册会员

积分
273
贡献
在线时间
小时
2021-3-7 17:04:33 | 显示全部楼层
感谢分享,用来试试看
共享共进共赢Sharing And Win-win Results
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2024-4-24 23:52 , Processed in 0.190703 second(s), 9 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表