当前位置: 代码迷 >> 高性能数据库开发 >> TUXEDO客户端开发基础有关问题
  详细解决方案

TUXEDO客户端开发基础有关问题

热度:8129   发布时间:2013-02-26 00:00:00.0
TUXEDO客户端开发基础问题
#include <stdio.h>
#include "atmi.h"
int main(int argc, char ?argv[])
{
  char ?buf;
  long len;
  if(argc != 2) {
  (void) fprintf(stderr, "Usage: simpcl string\n");
  exit(1);
  }//if argc

  //初始化连接
  if (tpinit((TPINIT ?) NULL) == -1) {
  (void) fprintf(stderr, "Tpinit failed\n");
  exit(1);
  }//if tpinit

  len = strlen(argv[1]);
  if((buf = (char ?) tpalloc("STRING", NULL, len+1)) == NULL) {

  (void) fprintf(stderr,"Error allocating send buffer\n");
  tpterm();
  exit(1);
  }
   
  //赋值
  (void) strcpy(buf, argv[1]);

  //调用服务
  if(tpcall("TOUPPER", buf, 0, &&buf, &&len, 0)==-1){
  (void) fprintf(stderr, "Can't send request to service TOUPPER\n");
  tpfree(buf);
  tpterm();
  exit(3);
  }

  (void) fprintf(stdout, "Returned string is: %s\n", rcvbuf);
  tpfree(buf);
  tpterm();
  return(0);
}

像这种例子都是只给TUXEDO服务传一个参数的,那如果我需要给服务传很多参数怎么办,比如,我需要给ITF_GETCSTINFO这样一个服务传客户的姓名、性别、年龄等,我该如何传呢?谢谢


这里没有专门的TUXEDO论坛,只好发到ORACLE了,时间紧急,知道的请务必讲一下,谢谢

------解决方案--------------------------------------------------------
传多个参数就用结构啊,tpalloc的时候用FML32格式,比如:
C/C++ code
         char                SendBuf[1024*3];    FBFR32            *send, *rcv;       long                      rcvLen;    int                         ret;    if (tpinit((TPINIT *) NULL) == -1)    {        (void) fprintf(stderr, "Tpinit failed\n");        exit(1);    }    if ((send=(FBFR32 *)tpalloc("FML32",NULL,1024*1024*2))==NULL)    {            printf("tpalloc error!\n");            return 0;    }            if ((rcv=(FBFR32 *)tpalloc("FML32",NULL,10000))==NULL)    {            printf("Error allocating receive buffer\n");            tpfree((char *)send);            tpterm();            exit(1);    }......    memcpy((void *)SendBuf,(void *)&a_struct_variable,sizeof(QueryReqStruc));    Fadd32(send, THE_FIELDID, (char *)&a_struct_variable, sizeof(The_struct));    ret = tpcall("servicename", (char *)send, 0, (char **)&rcv, &rcvLen, (long)0);    if(ret == -1) {            .......