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.