Thanks David, I'm surprised I haven't created a func like this too. I like using type() over vartype() because sometimes the main object may not exist either and I hate to think harder than I have to about all possible scenarios.
Sergey, thanks, I wasn't aware that vartype() returned "X". Now my second question, is it necessary to set o.o1=.NULL. in my example anyway, since it's already null due to executing o.o1.release()? Seems there's no hanging reference in this case. Thanks again!
-Mark
>Mark,
>
>I use a UDF IsObject() to perform the test:
>
>
>lparameter roObject
>
>return( ( type( "m.roObject" ) == 'O' ) and ( ! isnull( m.roObject ) ) )
>
>
>Setting an object reference to .null. has always felt like the cleaner way to clear out the pointer to an object. Sometimes you need to know if it ever was assigned to an object. Assigning .f. and causing it to change datatypes isn't quite as good IMO.
>
>>Standard practice seems to be, to set an object's property to .NULL. after releasing an object tied to a property. For example:
>>
>>o=CREATEOBJECT("empty")
>>ADDPROPERTY(o, "o1", CREATEOBJECT("form"))
>>o.o1.release()
>>o.o1=.null.
>>? TYPE("o.o1")
>>
>>