C/C++注册动态对象到Lu系统并进行运算符重载(四)

2014-11-24 07:38:58 · 作者: · 浏览: 2
ector0) goto err; if(InsertKey((char *)&pVector0,-1,key_Vector,pVector0,Del_Vector,NULL,0,NowKey)) //在Lu键树中注册键值 { free(pVector0); goto err; } } FunReObj(vFor); //该函数将返回一个动态对象 a.BType=key_Vector; a.VType=key_Vector; a.x=0; *(luVOID *)&(a.x)=(luVOID)pVector0; return a; err: a.BType=luStaData_nil; a.VType=luStaData_nil; a.x=0; SetRunErr(1,ErrName,1,0,vFor); return a; } //演示重载函数oset的用法,通过函数重载调用。设a是一个Vector对象,可实现赋值 a.#x=1.1, a.#y=2.2, a.#z=3.3 LuData _stdcall Vector_oset(luINT mm,LuData *xx,void *vFor) //对Vector的元素赋值 { static wchar_t ErrName[]=LVector oset; lu_Vector *pVector1; if(xx->BType==key_Vector && xx[1].BType==luStaData_struniint && xx[2].BType==luStaData_double) { pVector1=(lu_Vector *)SearchKey((char *)&(xx[0].x), sizeof(luVOID), key_Vector); if(!pVector1) goto err; if((luVOID)xx[1].x == Vector_x) { pVector1->x = *(double *)&(xx[2].x); } else if((luVOID)xx[1].x == Vector_y) { pVector1->y = *(double *)&(xx[2].x); } else if((luVOID)xx[1].x == Vector_z) { pVector1->z = *(double *)&(xx[2].x); } else { goto err; } return *xx; } err: SetRunErr(1,ErrName,1,0,vFor); return *xx; } //演示重载函数oget的用法,通过函数重载调用。设a是一个Vector对象,可实现取值 a.#x, a.#y, a.#z LuData _stdcall Vector_oget(luINT mm,LuData *xx,void *vFor) //对Vector的元素赋值 { static wchar_t ErrName[]=LVector oget; lu_Vector *pVector1; LuData a; if(xx->BType==key_Vector && xx[1].BType==luStaData_struniint) { pVector1=(lu_Vector *)SearchKey((char *)&(xx[0].x), sizeof(luVOID), key_Vector); if(!pVector1) goto err; if((luVOID)xx[1].x == Vector_x) { *(double *)&(a.x) = pVector1->x; } else if((luVOID)xx[1].x == Vector_y) { *(double *)&(a.x) = pVector1->y; } else if((luVOID)xx[1].x == Vector_z) { *(double *)&(a.x) = pVector1->
z; } else { goto err; } a.BType=luStaData_double; a.VType=luStaData_double; //返回一个实数 return a; } err: SetRunErr(1,ErrName,1,0,vFor); return *xx; } //演示重载函数o的用法,通过函数重载调用。设a是一个Vector对象,o[a]可输出如下信息:Vector x = 1.1, y = 2.3, z = 3.3 LuData _stdcall Vector_o(luINT mm,LuData *xx,void *vFor) //输出Vector的值 { static wchar_t ErrName[]=LVector o; lu_Vector *pVector1; wchar_t wchNum[32]; char chNum[32]; luVOID i,k=0; luMessage pMessage; LuData a; pMessage=(luMessage)SearchKey((char *)&k,sizeof(luVOID),luPubKey_User); if(xx->BType==key_Vector) { pVector1=(lu_Vector *)SearchKey((char *)&(xx[0].x), sizeof(luVOID), key_Vector); if(!pVector1) goto err; pMessage(LVector x = ); k = 11; _gcvt_s(chNum,32,pVector1->x,8); for(i=0;chNum[i];i++) wchNum[i]=chNum[i]; wchNum[i]=''; pMessage(wchNum); k = k + i; pMessage(L, y = ); k = k + 6; _gcvt_s(chNum,32,pVector1->y,8); for(i=0;chNum[i];i++) wchNum[i]=chNum[i]; wchNum[i]=''; pMessage(wchNum); k = k + i; pMessage(L, z = ); k = k + 6; _gcvt_s(chNum,32,pVector1->z,8); for(i=0;chNum[i];i++) wchNum[i]=chNum[i]; wchNum[i]=''; pMessage(wchNum); k = k + i; pMessage(L ); k = k + 2; a.BType=luStaData_int64; a.VType=luStaData_int64; a.x=k; //o函数总是返回输出的字符总数 return a; } err: SetRunErr(1,ErrName,1,0,vFor); return *xx; } LuData _stdcall OpLock_Vector(luINT m,LuData *Para,void *hFor,int theOperator) //Vector的运算符重载函数 { LuData a; switch(theOperator) { case 2: //重载运算符* return Vector_mul(m,Para,hFor); case 46: //重载函数new return Vector_new(m-1,Para+1,hFor); //注意参数个数的变化,忽略了new[Vector]中的参数Vector case 47: //重载函数oset return Vector_oset(m,Para,hFor); case 48: //重载函数oget return Vector_oget(m,Para,hFor); case 49: //重载函数o return Vect