- 论坛徽章:
- 0
|
20可用积分
#include <stdio.h>
#include <stdlib.h>
#include "atmi.h"
main(argc, argv)
{
long reqlen=1024;
char *reqbuf;
/* create connection to server side of tuxedo */
if(tpinit((TPINIT *)NULL)==-1)
{
(void)fprintf(stderr, "Tpinit failed!\n");
exit(1);
}
/* allocate buffer of send */
reqbuf=(char *)tpalloc("STRING", NULL, reqlen);
if(reqbuf==(char *)NULL)
{
printf("tpalloc failed!\n");
tpterm();
}
strcpy(reqbuf, "7844");
/* call service TEST1 */
if(tpcall("TEST1", (char *)reqbuf, 0L, (char **)&reqbuf, (long *)&reqlen, 0)<0)
{----老实和尚好像说这两个参数都用reqbuf似乎不妥,但是程序运行中倒没报错,有没有人支持老实和尚观点的?
printf("tpcall failed, tperrno=%ld, tperrtext=%s\n", tperrno, tpstrerror(tperrno));
tpfree(reqbuf);
tpterm();
exit(1);
}
printf("name=%s\n", reqbuf);
tpfree(reqbuf);
tpterm();
return (0);
}
==============
我用以上这个c程序作客户端,去调用Tuxedo的服务TEST1,
==============
Tuxedo的服务端程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <atmi.h>
#include <userlog.h>
EXEC SQL INCLUDE sqlca;
EXEC SQL BEGIN DECLARE SECTION;
long al_empno=0;---应该用char *al_empno;
char ac_ename[11]="";
EXEC SQL VAR ac_ename IS STRING(20);
EXEC SQL END DECLARE SECTION;
TEST1(TPSVCINFO *rqst)
{
/* receive empno from client to get ename from emp */
al_empno=(FBFR32 *)rqst->data;
EXEC SQL select ename into :ac_ename from EMP where empno=:al_empno;
if(sqlca.sqlcode!=0)
{
userlog("select from EMP 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);
}
/* return result to client */
strcpy(rqst->data, ac_ename);
tpreturn(TPSUCCESS, 0, rqst->data, 0, 0);
}
===============================
以上是Tuxedo的服务端程序,先用proc预编译,然后用buildserver编译成test1可执行文件,最后用tmboot启动,可是执行客户端程序时总是报错:
tperror=11
察看日志说:ora-01403错误
请问,我的C程序有什么问题,只就C程序而言,有无语法错误?或者哪里有明显的错误?
[ 本帖最后由 simhare 于 2009-7-3 09:13 编辑 ] |
最佳答案
查看完整内容
呵呵,我是看你tpcall的两个参数用的都是reqbuf,不知道这样有沒有问题,反正我以前没这么用过
|