51CTO技术论坛 » PowerBuilder » PB调用金税组件接口的问题,急!!!        上一帖     下一帖    查看完整版本

页: [1]

baoxiangxiang2008-5-27 07:54
PB调用金税组件接口的问题,急!!!

目前平台是PB7.0,金税提供了一个组件接口,这样可以直接用本公司管理系统调用金税软件打印各种发票.
在PB中需要调用一个addedrealtax.dll.第一步是开卡,从金税提供的软件方案看是使用opencard(),
申明了全局外部函数:
FUNCTION int opencard() LIBRARY "C:\Program Files\金税\BIN\addedrealtax.dll"
然后直接使用函数opencard(),系统报错为:
Error opening DLL library addedrealtax.dll for external function at line 1 in function opencard()....
请问我这样调用行不行,是不是对DELPHI写的DLL(金税是用DELPHI开发的)有特殊的要求?

jnf0092008-5-27 07:55
[color=red][b]此回复于2008-06-09 09:40被 [url=http://bbs.51cto.com/profile-uid-24207.html]ribut9225[/url] 评为最佳答案[/b][/color]

//下面是个PB调用例子你看看,我测试过了可以调用
//调用前需要注册一下金税提供的DLL文件,如:regsvr32 D:\weiliang\20080528\Tax\TAX\TaxCardX.dll
//如果在安装过金税系统的电脑则可以不用注册
//这里用到的是OLE对象,不能在外部函数中定义,因为金税很多方法是在里面的对象里面。
long ll_return
OLEobject  my_test
my_test = CREATE OLEObject

ll_return = my_test.connecttonewobject("TaxCardX.GoldTax")  //导入金税TaxCardX.dll中的GoldTax对象
///因为OpenCard()是在GoldTax里面
IF ll_return < 0 THEN
    DESTROY my_test
    MessageBox("Connecting to COM Object Failed","Error: " + String(ll_return))
    Return
elseif ll_return = 0 then
        MessageBox("","OK")
END IF

OpenCard()  //打开金税卡

baoxiangxiang2008-5-27 07:55
再摘录一部分金税提供的接口文挡:
=====================================
开启金税卡  
方法:OpenCard();  

功能:本项功能必须在其它功能前首先调用,如果尚未调用
此功能而调用其它功能,则会产生返回码为1的尚未开启金税卡
错误。它开启并占用金税卡设备,初始化各项参数,分配软件所
需各项资源;  

传出:  

InvLimit – 开票限额, 金税卡发票开具价税合计限额  

TaxCode – 本单位税号  

TaxClock – 金税卡时钟  

MachineNo – 开票机号码,主开票机为0  

IsInvEmpty – 有票标志,0为金税卡中无可开发票,1为有
票  

IsRepReached – 抄税标志,0为未到抄税期,1为已到抄税
期  

IsLockReached – 锁死标志,0为未到锁死期,1为已到锁死
期  

======================================


调用方式举例  

下面仅以C++ Build语言为例分几种情况作一举例:  

程序要实现的流程如下:首先要创建组件实例GoldTax,然后调用
OpenCard()方法打开金税卡,如果成功打开金税卡了,这时就可以传入开票数
据了(传入发票整体信息前调用InvInfoInit()方法初始化发票整体信息各项
属性。)。记住:开票完毕时,要关闭金税卡,释放对金税卡的设备占用,释放
其他占用的资源。
GoldTax = new TGoldTax( this);  
GoldTax->OpenCard();  
……  
此处添加实现各种功能的具体代码
……  
GoldTax->CloseCard();  
delete GoldTax;

ribut92252008-5-29 00:36
这个函数声明应该比较简单
不知道对方是怎么写这个DLL的,PB调用DLL有一些特殊要求
你可以看看偶的BLOG
偶给你一连接:
[url]http://ribut9225.blog.51cto.com/24441/73193[/url]

baoxiangxiang2008-5-30 05:18
回复 #3 ribut9225 的帖子

感谢答复,看了你给的连接,看来PB调用dll确实比较麻烦的,而且金税也不可能为我们单独去改写DLL文件了.
这是对方提供的接口文挡中一部分:
==================================================
对于自主或委托开发管理信息系统的企业,我们开发了
Windows版防伪开票组件接口软件,将防伪税控开票功能嵌入企
业销售软件内,为真正实现防伪税控防伪税控系统与企业管理信
息系统的无缝连接创造了必要的条件。

组件调用软件基于ActiveX规范,提供标准开票界面和后台
命令两种接口方式,实现企业日常开具、作废和打印税控发票的
功能,为需要实时打印发票或有专门开票要求的企业提供了适宜
的解决方案。

对于可以采用通用开票界面的销售软件,推荐使用标准开票
界面接口方式,此时本软件提供与防伪税控开票软件相同的开
票、查询和作废用户界面,并将发票数据通过组件接口传入销售
软件。采用这种方式,企业的销售软件不用开发专用发票开票界
面,开票界面比较规范统一。

对于开票时需要录入辅助数据,或对发票填写方式有所约
束,必须具备专门或行业性开票界面的企业,则应采用后台调用
开票命令的接口方式。这种方式的开票数据必须从企业销售软件
的开票界面取得,通过定义的COM接口传入接口软件,通过接
口软件将开票数据记入防伪开票软件数据库并写入金税卡。

安装本软件之前,必须首先安装防伪税控系统硬件设备,并


安装Windows版防伪税控开票子系统软件。在本软件安装后,
进入防伪税控开票子系统,选择系统注册功能,将软件注册版本
设为组件接口版,然后输入从我公司取得注册特征码,才能使用
本软件。

本软件使用时,必须接好防伪税控设备,插好本企业IC卡,
并且没有任何软件访问金税卡设备,本软件必须独占使用金税
卡。

baoxiangxiang2008-5-30 05:20
在不能改变这个条件的情况下,还有其他解决的办法吗?我看到说对 COM类型的组件,可以使用connecttonewobject()的方法,不知可行否?

ln_lz2008-6-5 02:11
我们连接的是这个!你可以试一下!  
connecttonewobject("TaxCardX.GoldTax")

jnf0092008-6-5 05:54
楼上的connecttonewobject("TaxCardX.GoldTax")是在PB中调用吗?请问下你们是怎么申明和调用的?能否写具体点?谢谢了!

pan_wei_jie2008-6-6 02:47
[email]pan_wei_jie@163.com[/email]兄弟,我也在研究这个问题,咱们一起讨论一下?

我邮箱:pan_wei_jie@163.com

MSN也一样:pan_wei_jie@163.com

chenwenwei2008-7-11 03:24
二楼说的对是TaxCardX.dll不是addedrealtax.dll,开票系统是CBuilder开发的,如果你公司购买组件接口的话有详细的PB开发的demo,本人开发了一个转换接口程序,具有拆分合并功能也是通过调用TaxCardX.dll直接开启金税卡开具发票。

chenwenwei2008-7-11 03:27
addedrealtax.dll是开票系统中的另外一个动态库,而且dll已加密处理

关键词: 打印       

相关文章:
PB中数据窗口的精确页面打印技术
pb实现打印中人民币大写
通过注册表配置ODBC
制作工资条打印窗口?
打印预览的问题

查看完整版本: PB调用金税组件接口的问题,急!!!


Powered by 51CTO.COM