LPARAMETERS lcAlias,liIDObject,laProp
* lcAlias - Alias of opened DBC
* liIDObject - Object ID
* @laProp - Output array for Properties, their values and results
LOCAL liStart,liLen,liLenID,lii,liID,liType
liStart=1 && First char
SELE (lcAlias) && Skip to DBC
LOCATE FOR ObjectID=liIDObject && Find object
IF !FOUND() && If not found
RETURN _DBC_ObjectNotFound && Get out
ENDIF
lii=0 && Reset counter
DO WHILE liStart<=LEN(Property)
liLen=This.C4ToI(SUBS(Property,liStart,4)) && Lenght
* This is lenght of Property ID
liLenID=This.C2ToI(SUBS(Property,liStart+4,2))
lii=lii+1
DIMENSION laProp(lii,4)
* Property ID
laProp(lii,1)=This.CnToI(SUBS(Property,liStart+4+2,liLenID))
* Native Value
laProp(lii,3)=SUBS(Property,liStart+3+2+liLenID+1,liLen-(3+2+liLenID+1))
* Check ID property
liType=This.GetValueType(laProp(lii,1))
IF liType=_DBC_ValueType_Unknown
laProp(lii,4)=_DBC_Check_PropertyType_Unknown
ELSE
* Check if native value have right format
IF IIF(liType=_DBC_ValueType_String, RIGHT(laProp(lii,3),1)#CHR(0),;
IIF(liType=_DBC_ValueType_Byte, LEN(laProp(lii,3))#1,;
IIF(liType=_DBC_ValueType_SI32R,LEN(laProp(lii,3))#4,;
IIF(liType=_DBC_ValueType_I32R, LEN(laProp(lii,3))#4,;
IIF(liType=_DBC_ValueType_Boolean, ;
LEN(laProp(lii,3))#1 OR !INLIST(ASC(laProp(lii,3)),0,1),;
IIF(!ISNULL(This.oConnector),This.oConnector.CheckProperties(laProp(lii,1),liType,laProp(lii,3)),;
.T.))))))
laProp(lii,4)=_DBC_Check_PropertyValue_Invalid
ELSE
* Convert DBC value to Value
laProp(lii,2)=This.DBCValueToValue(laProp(lii,1),laProp(lii,3))
laProp(lii,4)=_DBC_Check_OK
ENDIF
ENDIF
liStart=liStart+liLen
ENDDO
RETURN lii