Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16965
  • 博文数量: 8
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-26 21:59
文章分类
文章存档

2016年(7)

2011年(1)

我的朋友
最近访客

分类: PERL

2016-08-16 21:25:10

在见到医保提供的sei.dll文件之前,在网上查了一下,Perl可以通过Win32::API模块对dll文件进行调用。

后来拿到了医保sei.dl文件,及医保接口文档,在接口文档里有这样的内容:

//创建地纬嵌入式接口对象,调用com组件
int vi
Oleobject sei                 
sei =create Oleobject   //创建ole对象seiproxy
vi= sei.connecttonewobject('sei3') //连接com组件
if vi <> 0 then
  messagebox('错误','创建地纬嵌入式接口sei对象失败!')
  return 
end if

那么,在Perl调用com组件时就应当使用Win32::OLE。

这一段程序用Perl来写应该是这样:
#!"D:\Strawberry\perl\bin\perl"
use Win32::OLE;
my $sei = CreateObject Win32::OLE 'sei3' or die $!;
my $vi = $sei->connecttonewobject('sei3');
if ($vi != 0)
{
print "创建地纬嵌入式接口sei对象失败!\n";
}
else
{
print "创建地纬嵌入式接口sei对象成功!\n";
}

医保接口文档中的一段程序示例:
//无卡取参保人的基本信息 PB示例代码:
sei.resetvar()
sei.putvarstring('grbh','000000000000000001')
sei.putvarstring('xm','测试')
sei.putvarstring('yltclb','4')
sei.putvarstring('sbjgbh','00000000000000000000')

if sei.request_service('query_person_info')<>0 then
     messagebox('调用无卡取信息服务失败',"错误信息:"+sei.get_errtext())
     return
end if
//获取服务执行成功后的返回值
vrqlb  = sei.getvarstring('rqlb')
vxm   = sei.getvarstring('xm')
vzfbz  = sei.getvarstring('zfbz')
vmzdbjbs = sei.getvarstring('mzdbjbs') //获取门诊大病登记的疾病编码

用Perl来写应该是这样:

#无卡取参保人的基本信息 Perl代码:
$sei->resetvar();
$sei->putvarstring('grbh','000000000000000001');
$sei->putvarstring('xm','测试');
$sei->putvarstring('yltclb','4');
$r = $sei->putvarstring('sbjgbh','00000000000000000000');

if ($sei->request_service('query_person_info') != 0)
{
print "调用无卡取信息服务失败!\n"; 
}


$vrqlb  = $sei->getvarstring('rqlb');
$vxm   = $sei->getvarstring('xm');
$vzfbz  = $sei->getvarstring('zfbz');
$vmzdbjbs = $sei->getvarstring('mzdbjbs');

print "$vrqlb $vxm $vzfbz $vmzdbjbs";

在医保专线接通以后,使用Win32::OLE模块的程序运行正常,能够和医保服务器正常通信。

阅读(1567) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~