中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> Bea专区 > Tuxedo
Power Builder中调用tuxedo函数简介
作者:佚名 时间:2005-09-20 10:29 出处:互连网 责编:小渔
              摘要:本文目的是简单介绍如何在power builder 7.0开发环境中开发tuxedo应用,以tuxedo中FML32类型buffer为例,讲述了如何在power builder7.0中声明tuxedo api函数,如何使用tuxedo API函数,如何采用同步方式调用后台tuxedo服务。
Power Builder中调用tuxedo函数简介
 
  摘 要:本文目的是简单介绍如何在power builder 7.0开发环境中开发tuxedo应用,以tuxedo中FML32类型buffer为例,讲述了如何在power builder7.0中声明tuxedo api函数,如何使用tuxedo API函数,如何采用同步方式调用后台tuxedo服务。

1.pb中如何声明tuxedo API函数

为了在PowerBuilder应用程序中调用存放在动态链接库中tuxedo的函数,需要事先声明各tuxedoAPI函数。在声明时要注意明确:

(1)函数的作用范围是全局的还是局部的。全局声明可使该函数用于整个应用,局部声明仅使该函数在对象的脚本中有效。

(2)必须指明函数返回的数据类型、传递参数的个数和类型,并将存放该函数的tuxedo动态链接库的名字告诉PowerBuilder。

下面是例举了一些常用tuxedo API函数,该函数是tuxedo中wtuxws32.dll(workstation方式)中一些常用函数,在声明时候,由于该函数应用于整个应用,所以采用了全局声明方式,选用Declare 中Global External Functions。具体查看下图中声明方式。



下面把图示tuxedo API函数解释说明一下:

Function long tuxreadenv (string filename,string labelname) LIBRARY "wtuxws32.dll"

/* 读取tuxedo环境变量的函数,filename 为环境变量的文件名字,labelname为section名字*/

Function Integer tpinit (Long TPINFO ) LIBRARY "wtuxws32.dll"

/* tpinit 函数,允许client加入tuxedo应用中*/

Function Integer tpterm () LIBRARY "wtuxws32.dll"

/* tptem 函数,client从tuxedo应用中remove掉*/

Function Integer tpcall (String SVCNAME , Long IDATA , Long ILEN, ref Long ODATA ,ref Long OLEN , Long flags ) LIBRARY "wtuxws32.dll"

/* tuxed同步调用函数,tpcall发送同步应答消息,等待服务端的应答*/

Function Long tpalloc (String BUFTYPE , String SUBTYPE , Long BUFSIZE ) LIBRARY "wtuxws32.dll"

/* 空间分配函数,申请tuxedo BUFTYPE类型的buffer*/

Function Long tprealloc (Long buffer , Long BUFSIZE ) LIBRARY "wtuxws32.dll"

/* 重新申请buffer大小的函数,大小为BUBSIZE*/

Subroutine tpfree (Long buffer ) LIBRARY "wtuxws32.dll"

/* 释放buffer*/

Function integer gettperrno() library "wtuxws32.dll"

/* 获得tuxedo错误编码,与tperrno相同*/

Function Integer Fchg32( Long RCVBUF,long FLDID,long OCC, ref String value,ref long LEN ) LIBRARY "wtuxws2.dll"

/*改变RCVBUF中field:FLDID的occurrence等于OCC的value*/

Function integer Fget32( Long RCVBUF,long FLDID,long OCC,ref String value,ref long LEN) library"wtuxws32.dll"

/*从RCVBUF中获得field:FLDID的occurrence等于OCC的value*/

Function String tpstrerror(integer tperrno) library "wtuxws32.dll"

/* 获得tuxedo错误消息的错误信息字符串,与tpstrerror相同 */

LIBRARY "libfml32.dll" alias for "Fchg32"

Function Integer Fchgd32( Long RCVBUF,long FLDID,long OCC, ref double value,ref long LEN ) LIBRARY "wtuxws32.dll" alias for "Fchg32"

/* 应用于double数据类型Fchg32函数*/

Function Integer Fchgl32( Long RCVBUF,long FLDID,long OCC, ref long value,ref long LEN ) LIBRARY " wtuxws32.dll" alias for "Fchg32"

/* 应用于long数据类型Fchg32函数*/

Function integer Fgetd32( Long RCVBUF,long FLDID,long OCC,ref double value,ref long LEN) library" wtuxws32.dll" alias for "Fget32"

/* 应用于double数据类型Fget32函数*/

Function integer Fgetl32( Long RCVBUF,long FLDID,long OCC,ref long value,ref long LEN) library" wtuxws32.dll" alias for "Fget32"

/* 应用于long数据类型Fget32函数*/


2.Pb代码中如何引用tuxedo函数
-- 声明完成后,应用程序就可以调用tuxedo各API函数了 ,调用该函数的代码与调用任何标准的PowerScript函数一样,区别在于:该函数存放在tuxedo动态链接库中,调用它时,tuxedo动态链接库装入内存,函数执行。如下图所示:



详细代码示例如下:

int iRet

string ErrInfo

long sndbuf,rcvbuf

double lf_deposit

double lf_recnum

string strtmp

long len,lBillCount

long ll_NumLong

 

ErrInfo = space(200)

iret = tuxputenv("WSNADDR=//123.100.1.66:6000") /*设置环境变量*/

messagebox('tuxputenv',string(iRet))

iret = tpinit(0) /*初始化加入tuxedo应用*/

messagebox('tpinit',string(iret))

sndbuf = tpalloc("FML32","",1024) /*申请发送buffer*/

rcvbuf = tpalloc("FML32","",1024) /*申请接收buffer*/

 

lf_recnum = 942342.12

strtmp = "abcd"

iRet = Fchgd32(sndbuf,100665536,0,lf_recnum,len) /*改变buffer中field的value*/

messagebox('Fchg32',string(lf_recnum))

 

iRet = Fchgl32(sndbuf,33556580,0,lBillCount,len)

messagebox('Fchg32',string(lBillCount))

 

iret = tpcall ("FMLTMP" , sndbuf , 0, rcvbuf , LEN , 0 )

messagebox('tpcall',string (iret))

/*同步调用FMLTMP后台tuxedo服务*/

 

len=0

iret = Fgetd32(rcvbuf,100665536,0,lf_recnum,len) /*取得buffer中field的value*/

messagebox('fgetd32',string(lf_recnum))

 

len =0

iret = Fgetl32(rcvbuf,33556580,0,lBillCount,len)

messagebox('fgetl32',string(lBillCount))

len=0

lf_Deposit = 0.0

iret = Fgetd32(rcvbuf,100665348,0,lf_Deposit,len)

messagebox('fgetd32(DEPOSIT)',string(lf_Deposit))

 

ll_NumLong=0

iret = Fgetl32(rcvbuf,33556847,0,ll_NumLong,len)

messagebox('fgetd32(ll_NumLong)',string(ll_NumLong))

 

tpfree(sndbuf)

tpfree(rcvbuf)

tpterm()

 

 

 作者简介
吴绍永是(dev2dev ID: wsywin) BEA dev2dev中文网站--在线技术论坛Tuxedo栏目版主,资深Tuxedo专家
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有