跳到导航
BEA Dev2Dev Oracle and BEA
首页 资源中心 dev2dev学堂 在线技术论坛 User Group CodeShare
dev2dev 首页 > 资源中心 > 技术文章
Power Builder中调用tuxedo函数简介

时间:2003-05-22
作者:吴绍永
浏览次数:
本文关键字:TUXEDOPOWERBUILDER函数
文章工具
推荐给朋友 推荐给朋友
打印文章 打印文章
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专家
dot dot dot

dot
  作者其它文章
您对本文的评价
您对这篇文章的看法如何?
太棒了!5分 不错啊 4分 一般般 3分 有待提高 2分 不好 1分

   
相关产品