vlax-put / get are undocumented as far as I know, but here's my take on the subject:
Using the example of retrieving the Centre of a Circle:
A Circle has the center property and this can be retrieved using the following methods, each with varying returns:
Method 1:
(vla-get-Center <circle>)
Returns a Variant:
#<variant 8197 ...>
[ The 8197 indicates the variant type (which can also be obtained using the vlax-variant-type, in this case 8197 = 8192 + 5 indicating that the variant is a safearray of Doubles. ]
This can be converted to a SafeArray, then a 3D point using:
(vlax-safearray->list
(vlax-variant-value
(vla-get-center <circle>)))
We now have the data in list form.
Method 2:
(vlax-get-property <circle> 'Center)
This will also return a variant, and the above applies.
Method 3:
(vlax-get <circle> 'Center)
This is an older method, and the function vlax-get isn't documented. The method will return data in AutoLISP data types:
(-46.4701 16.7293 0.0)
This method is preferable in most cases, but can sometimes be troublesome with some properties.
A similar reasoning applies to Methods,
Using our Circle as an example again, let's say we want to perform the Move Method:
Method 1:
We could use:
(vla-move <circle> (vlax-3D-point <point1>) (vlax-3D-point <point2>))
Notice that we require the vlax-3D-point function to convert our 3 element lists into safearray variants of Doubles.
Aside: Another way to create our variants for use with this method would be:
(vlax-make-variant
(vlax-safearray-fill
(vlax-make-safearray vlax-vbDouble '(0 . 2)) <point>))
But this is of course slightly verbose...
Method 2:
Using the logic that applied to the property functions, we could also use:
(vlax-invoke-method <circle> 'Move (vlax-3D-point <point1>) (vlax-3D-point <point2>))
This again deals in variants.
Method 3:
Finally, we can use:
(vlax-invoke <circle> 'Move <point1> <point2>)
This method deals in native AutoLISP datatypes such as lists, and can sometimes be more manageable.
Thats all for now,
Lee