VIEW缓冲区类似与C中的结构,该结构中的类型可以是short char long float double STRING和CARRAY。要在一个文件中定义该VIEW(VIEW32)结构,然后才能使用。VIEW有子类型,子类型为该VIEW(VIEW32)的名字,在调用tpalloc()分VIEW(VIEW32)缓冲区时要制定该子结构。
《tuxedo 中间件的开发与配置》这本书虽然比较老了,但自我感觉对tuxedo初学者很好,以下是该书在此处的一个小错误及解决方法。在讲到tuxedo数据缓冲VIEW类型的时候:
VIEW使用过程:(1)定义VIEW的定义文件aud.v
VIEW aud$/* VIEW sturcture for audit information*/#type cname fbname count flag size nulllong b_id BHANCH_ID 1 - - 0float balance BALANCE 2 - - 0.0string ermsg STATLIN 3 - 80 ""
=================================================type该字段的数据类型cname该字段的名字fbname转化成FML或FML32时相应字段的名字count该字段的位置值flag该字段的一些标志,对转化成FML(FML32)相关size该字段的大小,只对SRTRING和CARRY有用null该数据段为空时的默认值$注释出现在*.h文件中#注释,不出现在*.h文件中-默认值=================================================
(2)用viewc -n aud.v进行编译,生成对应的aud.h和aud.Vviewc: (6) error: CMDFML_CAT:13: ERROR: Unexpected end of file0 Warning(s)1 Error(s)Do you want to continue? (y or n) 如果选择y,可以生成这两个文件,但不是预期的结果生成的aud.h如下
struct aud {/* VIEW sturcture for audit information*/ long b_id; float balance[2]; char ermsg[3][80]; long line6;};
改正后aud.v
VIEW aud$/* VIEW sturcture for audit information*/#type cname fbname count flag size nulllong b_id BHANCH_ID 1 - - 0float balance BALANCE 1 - - 0.0string ermsg STATLIN 1 - 80 ""END
[tuxedo@happy viewapp]$ viewc -n aud.v# ... processing aud.v ...[tuxedo@happy viewapp]$ lsaud.h aud.v aud.V[tuxedo@happy viewapp]$ vi aud.h
struct aud {/* VIEW sturcture for audit information*/ long b_id; float balance; char ermsg[80];};
这样得到预期结果。
(3)定义环境变量VIEWDIR(VIEWDIR32):VIEW(VIEW32)定义文件所在目录 VIERFILES(VIEWFILES32):VIEW(VIEW32)定义文件名。
set VIEWFILES=aud.Vset VIEWDIR=%APPDIR%
(4)在使用到VIEW(VIEW32)的程序中#include *.h
(5)在程序中想使用结构一样使用VIEW(VIEW32)