




 
size_is
 attribute will be converted to a Lisp array of the appropriate size allocated for the dynamic extent of the body forms. After the body has been evaluated, the contents of the array will be copied into the foreign array that the caller has supplied.
nil
 initially and the body should use 
setq
 to set it to the value to be returned.In the latter case, the value will be converted to a foreign object after the body has been evaluated. The following conversions are done:
string
 attribute, a Lisp string will be converted to a foreign string using 
CoTaskMemAlloc()
.
BSTR*
, a Lisp string will be converted to a foreign string using 
SysAllocString()
.
VARIANT*
, the value can be any Lisp value, with the VT code being set according to the Lisp type (see Automation types, VT codes and their corresponding Lisp types). If exact control is required, use the 
pass-style
 
:foreign
 and the function set-variant.
SAFEARRAY(
type
)*
, the value can be either a foreign pointer to an appropriate 
SAFEARRAY
 or a Lisp array. In the latter case, a new 
SAFEARRAY
 is created which contains the elements of the Lisp array converted as in Automation types, VT codes and their corresponding Lisp types.
VARIANT_BOOL*
, the value can be a generalized boolean.