1、定义view文件(demo.view)
VIEW aud
$ /*VIEW structure for audit information*/
#type cname fbname count flag size null_value
long b_id - 1 - - 0
float balance - 1 - - 0.0
string ermsg - 1 - 80 ""
END
2、编译view文件
viewc32 -n demo.view
将生成两个文件:demo.h, demo.V
3、设置两个环境变量(可直接添加到tux.env中,使用view32的服务端与客户端都需要设置)
VIEWFILES32=demo.v; export VIEWFILES32
VIEWDIR32=/home/oracle/simpapp; export VIEWDIR32
4、服务端代码片段
#include<demo.h>
void TOUPPER(TPSVCINFO *rqst)
{
int i;
//定义view32结构体指针
struct demo *ptr;
//将客户端传输的rqst->data的数据强制转换成view32类型数据
ptr=(struct demo*)rqst->data;
//日志中输出得到的数据
userlog("VIEW %d - %f - %s/n",ptr->b_id,ptr->balance,ptr->name);
//向view32结构体中写入数据
ptr->b_id=321;
ptr->balance=1984.14;
for(i=0;i<strlen(ptr->name);i++)
{
ptr->name=[i]=toupper(ptr->name[i]);
}
//返回数据到客户端
tpreturn(TPSUCCESS,0,rqst->data,0);
}
5、客户端代码
#include<demo.h>
int main(int argc,char * argv[])
{
//定义view32类型缓冲区
struct demo *sendbuf;
struct demo * rcvbuf;
//省略
//分配缓冲区
if((sendbuf=(struct demo *)tpalloc("VIEW32","demo",sizeof(struct demo))) == NULL)
{
(void) fprintf(stderr,"Error allocating view buffer./n");
tpfree((char *)sendbuf);
tpterm();
exit(1);
}
if((rcvbuf=(struct demo *)tpalloc("VIEW32","demo",sizeof(struct demo))) == NULL)
{
(void) fprintf(stderr,"Error allocating view buffer./n");
tpfree((char *)sendbuf);
tpfree((char *)rcvbuf);
tpterm();
exit(1);
}
//给发送缓存区赋值
sendbuf->b_id=123;
sendbuf->balance=1895.32;
(void)strcpy(sendbuf->name,argv[1]);
//调用远程服务
ret=tpcall("TOUPPER",(char *)&sendbuf,0,(char **)&rcbbuf,&rcvlen,(long)0);
if(ret == -1)
{
//调用失败处理
}
(void) fprintf(stdout,"VIEW: %d - %f - %s/n",rcvbuf->b_id,rcvbuf->balance,rcvbuf->name);
//释放资源,省略
}