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);
//釋放資源,省略
}