The following is built on code I developed in conjunction with MP during a conversation a few years ago, it may prove useful:
(defun vlax-dump-object->list ( obj mth )
(append
(list
(mapcar
(function
(lambda ( prp )
(list prp (vlax-get obj prp))
)
)
(_GetObjectProperties obj)
)
)
(if mth (list (_GetObjectMethods obj)))
)
)
(defun _GetObjectProperties ( obj )
(vl-remove-if-not
(function
(lambda ( prp )
(vlax-property-available-p obj prp)
)
)
(_GetVlaProperties)
)
)
(defun _GetObjectMethods ( obj )
(vl-remove-if-not
(function
(lambda ( mth )
(vlax-method-applicable-p obj mth)
)
)
(_GetVlaMethods)
)
)
(defun _GetVlaAtoms ( )
(eval
(list 'defun '_GetVlaAtoms '( )
(list 'quote
(vl-sort
(vl-remove-if-not
(function
(lambda ( sym )
(wcmatch (vl-symbol-name sym) "vla`-*")
)
)
(atoms-family 0)
)
(function
(lambda ( a b )
(<
(vl-symbol-name a)
(vl-symbol-name b)
)
)
)
)
)
)
)
(_GetVlaAtoms)
)
(defun _GetVlaProperties ( )
(eval
(list 'defun '_GetVlaProperties '( )
(list 'quote
(mapcar
(function
(lambda ( sym )
(substr (vl-symbol-name sym) 9)
)
)
(vl-remove-if-not
(function
(lambda ( sym )
(wcmatch (strcase (vl-symbol-name sym)) "VLA`-GET`-*")
)
)
(_GetVlaAtoms)
)
)
)
)
)
(_GetVlaProperties)
)
(defun _GetVlaMethods ( )
(eval
(list 'defun '_GetVlaMethods '( )
(list 'quote
(mapcar
(function
(lambda ( sym )
(substr (vl-symbol-name sym) 5)
)
)
(vl-remove-if
(function
(lambda ( sym )
(wcmatch (strcase (vl-symbol-name sym)) "VLA`-GET`-*,VLA`-PUT`-*")
)
)
(_GetVlaAtoms)
)
)
)
)
)
(_GetVlaMethods)
)
(vl-load-com) (princ)