delphi中调用tuxedo示例

时间:2023-01-23 12:28:09

delphi中的代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  ret:Longint;
  SendBuf,RcvBuf,PKH_MC,PKH_DZ:pchar;
  fQF_JE:^Real;
  ilen,rlen:Longint;
  TPTTpinit:PTTpinit;
const
  M=32;
begin
  TPTTpinit:=PTTpinit(tpalloc('TPINIT',nil,sizeOf(PTTpinit)));
  //指定允许多线程调用
  TPTTpinit.Flags := M;
  ret := tpinit(TPTTpinit);
  if ret = -1 then
  begin
    showmessage('tpinit failed!');
    Exit;
  end;
  SendBuf := tpalloc('FML32', nil, 102400);
  RcvBuf := tpalloc('FML32', nil, 102400);
  fQF_JE :=  tpalloc('STRING', nil, 1024);
  PKH_MC :=  tpalloc('STRING', nil, 1024);
  PKH_DZ :=  tpalloc('STRING', nil, 1024);
  ilen := 10240;
  ret:=Fadd32(pointer(SendBuf),HBS_BH,pchar(Edit1.text),FLDLEN32(length(Edit1.text)));
  if ret = -1 then
  begin
    ShowMessage('Fadd failed!');
    tpfree(SendBuf);
    tpfree(RcvBuf);
    tpfree(PKH_MC);
    tpfree(PKH_DZ);
    tpfree(PAnsiChar(fQF_JE));
  tpfree(pchar(TPTTpinit));
    tpterm();
    Exit;
  end;
  ret := tpcall('TEST', SendBuf, longint(0), @RcvBuf, @rlen, 0);
  if ret = -1 then
  begin
    showmessage('tpcall failed!');
    tpfree(SendBuf);
    tpfree(RcvBuf);
    tpfree(PKH_MC);
    tpfree(PKH_DZ);
    tpfree(PAnsiChar(fQF_JE));
  tpfree(pchar(TPTTpinit));
    tpterm();
    Exit;
  end;
  ret := Fget32(pointer(RcvBuf),KH_MC,0,PKH_MC,0);
  if ret = -1 then
  begin
    showmessage('Fget KH_MC failed!');
    tpfree(sendbuf);
    tpfree(RcvBuf);
    tpfree(PKH_MC);
    tpfree(PKH_DZ);
    tpfree(PAnsiChar(fQF_JE));
  tpfree(pchar(TPTTpinit));
    tpterm();
    Exit;
  end;
  Label6.Caption := PKH_MC;
  ret := Fget32(pointer(RcvBuf),KH_DZ,0,PKH_DZ,0);
  if ret = -1 then
  begin
    showmessage('Fget KH_DZ failed!');
    tpfree(sendbuf);
    tpfree(RcvBuf);
    tpfree(PKH_MC);
    tpfree(PKH_DZ);
    tpfree(PAnsiChar(fQF_JE));
  tpfree(pchar(TPTTpinit));
    tpterm();
    Exit;
  end;
  Label7.Caption := PKH_DZ;
  ret := Fget32(PTFbfr32(RcvBuf),QF_JE,0,fQF_JE,0);
  if ret = -1 then
  begin
    showmessage('Fget QF_JE failed!');
    tpfree(sendbuf);
    tpfree(RcvBuf);
    tpfree(PKH_MC);
    tpfree(PKH_DZ);
    tpfree(PAnsiChar(fQF_JE));
  tpfree(pchar(TPTTpinit));
    tpterm();
    Exit;
  end;
  if fQF_JE^ > 0 then
    Label2.Caption:='结余'
  else
    Label2.Caption:='欠费';
  Edit2.Text := FloatToStr(fQF_JE^);
  tpfree(sendbuf);
  tpfree(RcvBuf);
  tpfree(PKH_MC);

  tpfree(PKH_DZ);
  tpfree(PAnsiChar(fQF_JE));
  tpfree(pchar(TPTTpinit));
  tpterm();
end;

tuxedo中server代码:

#include <stdio.h>
#include <atmi.h>
#include <userlog.h>
#include <fml32.h>
#include <test32.h>


EXEC SQL INCLUDE sqlca;

EXEC SQL BEGIN DECLARE SECTION;
char ahbs_bh[11]="";
char areturn[11]="";
char akh_mc[51]="";
short skf_mc = 0;
char akh_dz[51]="";
short skh_dz = 0;
char aqf_je[21]="";
char ass_df[11]="";
char strTransNo[2]="1";
char strCardNo[2]="1";
double CardMoney=0;
double UserMoney=0;
short Result=0;
char inUserNo[100];
char Description[100];
EXEC SQL VAR Description IS STRING(101);
EXEC SQL VAR inUserNo IS STRING(100);
EXEC SQL VAR strTransNo IS STRING(2);
EXEC SQL VAR strCardNo IS STRING(2);
EXEC SQL VAR areturn IS STRING(11);
EXEC SQL VAR ass_df IS STRING(11);
EXEC SQL VAR aqf_je IS STRING(21);
EXEC SQL VAR ahbs_bh IS STRING(11);
EXEC SQL VAR akh_mc IS STRING(51);
EXEC SQL VAR akh_dz IS STRING(51);
EXEC SQL END DECLARE SECTION;
TEST(TPSVCINFO *rqst)
{
FBFR32 *rcvbuf=NULL;
FBFR32 *sendbuf=NULL;
FLDLEN32 len=0;
FLDLEN32 sendlen = 1024;
rcvbuf = (FBFR32 *)rqst->data;
if (Fget32(rcvbuf,HBS_BH,0,(char *)&ahbs_bh,&len)==-1)
{
userlog("Fget failure!");
tpreturn(TPFAIL,0,rqst->data,0,0);
}
EXEC SQL select nvl(kh_mc,chr(0)),nvl(kh_dz,chr(0)) into :akh_mc,:akh_dz from dlyx.zl_yhjbqk where hbs_bh = :ahbs_bh;
if(sqlca.sqlcode!=0)
{
userlog("select from zl_yhjbqk failure,sqlcode=%ld,sqlerr=%s/n",sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc);
strcpy(rqst->data,sqlca.sqlerrm.sqlerrmc);
tpreturn(TPFAIL,0,rqst->data,0,0);
}
EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
EXEC SQL EXECUTE
BEGIN
  :areturn:=dlyx.czk_fnc_cxqf(:ahbs_bh,:UserMoney);
END;
END-EXEC;
userlog("aqf_je:%f",UserMoney);
if(sqlca.sqlcode!=0)
{
userlog("exec czk_fnc_cxqf failure,sqlcode=%ld,sqlerr=%s/n",sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc);
strcpy(rqst->data,sqlca.sqlerrm.sqlerrmc);
tpreturn(TPFAIL,0,rqst->data,0,0);
}
sendbuf = (FBFR32 *)tpalloc("FML32",NULL,sendlen);
if (Fchg32(sendbuf,KH_MC,0,(char *)&akh_mc,50)== -1)
{
tpfree((char *)sendbuf);
tpreturn(TPFAIL,0,rqst->data,0,0);
}
if (Fchg32(sendbuf,KH_DZ,0,(char *)&akh_dz,50)== -1)
{
tpfree((char *)sendbuf);
tpreturn(TPFAIL,0,rqst->data,0,0);
}
userlog("UserMoney:%f",UserMoney);
if (Fchg32(sendbuf,QF_JE,0,(char *)&UserMoney,60)== -1)
{
tpfree((char *)sendbuf);
tpreturn(TPFAIL,0,rqst->data,0,0);
}

tpreturn(TPSUCCESS,0,(char *)sendbuf,0,0);
tpfree((char *)sendbuf);
}

CHARGEIN(TPSVCINFO *rqst)
{
FBFR32 *rcvbuf=NULL;
FBFR32 *sendbuf=NULL;
FLDLEN32 len=0;
FLDLEN32 sendlen = 1024;
rcvbuf = (FBFR32 *)rqst->data;
if (Fget32(rcvbuf,HBS_BH,0,(char *)&ahbs_bh,&len)==-1)
{
userlog("Fget failure!");
tpreturn(TPFAIL,0,rqst->data,0,0);
}
if (Fget32(rcvbuf,SS_DF,0,(char *)&ass_df,&len)==-1)
{
userlog("Fget failure!");
tpreturn(TPFAIL,0,rqst->data,0,0);
}
EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
EXEC SQL EXECUTE
BEGIN
  :areturn:=dlyx.czk_fnc_cxqf(:ahbs_bh,:UserMoney);
END;
END-EXEC;
if(sqlca.sqlcode!=0)
{
userlog("select from gc_dfys failure,sqlcode=%ld,sqlerr=%s/n",sqlca.sqlcode,(char *)
sqlca.sqlerrm.sqlerrmc);
strcpy(rqst->data,sqlca.sqlerrm.sqlerrmc);
tpreturn(TPFAIL,0,rqst->data,0,0);
}
userlog("ssdf=%s/n",ass_df);
userlog("hbs_bh=%s/n",ahbs_bh);
EXEC SQL EXECUTE
BEGIN
  :areturn := dlyx.CZK_FNC_BalanceUserElecMoney(:strCardNo,:strTransNo,:ahbs_bh,:ass_df,:UserMoney);
END;
END-EXEC;
EXEC SQL COMMIT;
if(sqlca.sqlcode!=0)
{
userlog("EXEC CZK_FNC_BalanceUserElecMoney failure!");
strcpy(rqst->data,sqlca.sqlerrm.sqlerrmc);
tpreturn(TPFAIL,0,rqst->data,0,0);
}
sendbuf = (FBFR32 *)tpalloc("FML32",NULL,sendlen);
if (Fchg32(sendbuf,QF_JE,0,(char *)&UserMoney,(FLDLEN32)(sizeof(UserMoney)))== -1)
{
tpfree((char *)sendbuf);
userlog("Fchg failure!");
tpreturn(TPFAIL,0,rqst->data,0,0);
}
tpreturn( TPSUCCESS,0,(char *)sendbuf,0,0);
tpfree((char *)sendbuf);
}
CHECKUSER(TPSVCINFO *rqst)
{
 FBFR32 *rcvbuf;
 FBFR32 *sendbuf=NULL;
 FLDLEN32 flen=0;
 rcvbuf=(FBFR32*)rqst->data;
 
 sendbuf=(FBFR32*)tpalloc("FML32",NULL,512);
 flen=Fsizeof32(sendbuf);
 Finit32(sendbuf,flen);
 Fchg32(sendbuf,RET,0,0,(FLDLEN32)0);
 flen=sizeof(inUserNo);
 Fget32(rcvbuf,HBS_BH,0,inUserNo,&flen);

 userlog("strUserNo=%s/n",inUserNo);

 EXEC SQL EXECUTE
  BEGIN
  :Result:=dlyx.czk_fnc_checkuser(:inUserNo,:Description);
  END;
 END-EXEC;
 
 if(sqlca.sqlcode<0)
 {
  userlog("执行用户是否允许冲销电费函数失败!");
  Result=2;
    strcpy(Description,"");
 }
 Fchg32(sendbuf,KH_MC,0,(char*)&Description,(FLDLEN32)(sizeof(Description)));
 Fchg32(sendbuf,RET,0,(char*)&Result,(FLDLEN32)(sizeof(Result)));
 tpreturn(TPSUCCESS, 0, (char*)sendbuf, 0L, 0);
}

ubbconfig:

# (c) 2003 BEA Systems, Inc. All Rights Reserved.
# Copyright (c) 1994 Unix System Laboratories, Inc.
# All rights reserved
#
# THIS IS UNPUBLISHED PROPRIETARY
# SOURCE CODE OF Unix System Laboratories, Inc.
# The copyright notice above does not
# evidence any actual or intended
# publication of such source code.
#
#ident "@(#) samples/atmi/rpcsimp/ubbconfig $Revision: 1.5 $"
*RESOURCES
IPCKEY      123456
DOMAINID     simpapp
MODEL        SHM
MASTER       simple
MAXACCESSERS  100
MAXSERVERS    50
MAXSERVICES   100
LDBAL         N
PERM  0660
*MACHINES
SYDL01 LMID=simple
 APPDIR="d:/tuxedo"
 TUXCONFIG="d:/tuxedo/tuxconfig"
 TUXDIR="C:/bea/tuxedo8.1"
  TLOGDEVICE = "D:/tuxedo/TLOG"
  TLOGNAME=TLOG
  TLOGSIZE=100
 MAXWSCLIENTS=10
 CMPLIMIT="MAXLONG,MAXLONG"
 NETLOAD=1
 SPINCOUNT=1
*GROUPS
GROUP1 LMID=simple GRPNO=1
OPENINFO="Oracle_XA:Oracle_XA+Acc=P/username/password+SqlNet=YDGL+SesTm=3+MaxCur=5+LogDir=."
TMSNAME="TMS_ORA9i"    TMSCOUNT=2
*SERVERS
DEFAULT:
        CLOPT="-A"
test SRVGRP=GROUP1 SRVID=1
  CLOPT="-A"
  RQADDR=test
  RPPERM=0660    REPLYQ=Y   RPPERM=0660  MIN=20  MAX=40  CONV=N
  MAXGEN=1       GRACE=86400   RESTART=N
WSL SRVGRP=GROUP1 SRVID=1234
# CLOPT="-A -- -n <address> -x 10 -m 1 -M 10 -d <device>"
CLOPT="-A -- -n //sydl01:9999 -m 2 -M 5 -x 6"
#
# TUXEDO-to-DCE Gateway
#simpgw SRVGRP=GROUP1 SRVID=2
*SERVICES
TEST
CHARGEIN
CHECKUSER
INSERT AUTOTRAN=Y
REMOVE AUTOTRAN=Y
QUERY
UPDATE AUTOTRAN=Y
*ROUTING