Class OaIdl.SAFEARRAY

  • All Implemented Interfaces:
    Closeable, AutoCloseable
    Direct Known Subclasses:
    OaIdl.SAFEARRAY.ByReference
    Enclosing interface:
    OaIdl

    @FieldOrder({"cDims","fFeatures","cbElements","cLocks","pvData","rgsabound"})
    public static class OaIdl.SAFEARRAY
    extends Structure
    implements Closeable
    Implementation of SAFEARRAY. Implements Closable, which in this case delegates to destroy, to free native memory on close.

    VARTYPE for the SAFEARRAY can be:

    • VT_BOOL
    • VT_BSTR
    • VT_CY
    • VT_DATE
    • VT_DECIMAL
    • VT_DISPATCH
    • VT_ERROR
    • VT_I1
    • VT_I2
    • VT_I4
    • VT_INT
    • VT_R4
    • VT_R8
    • VT_RECORD
    • VT_UI1
    • VT_UI2
    • VT_UI4
    • VT_UINT
    • VT_UNKNOWN
    • VT_VARIANT

    General comment: All indices in the helper methods use java int.

    The native type for the indices is LONG, which is defined as:

    A 32-bit signed integer. The range is �2147483648 through 2147483647 decimal.
    • Constructor Detail

      • SAFEARRAY

        public SAFEARRAY()
      • SAFEARRAY

        public SAFEARRAY​(Pointer pointer)
    • Method Detail

      • read

        public void read()
        Description copied from class: Structure
        Reads the fields of the struct from native memory
        Overrides:
        read in class Structure
      • createSafeArray

        public static OaIdl.SAFEARRAY.ByReference createSafeArray​(int... size)
        Create a SAFEARRAY with supplied VARIANT as element type.

        This helper creates a basic SAFEARRAY with a base type of VT_VARIANT. The array will have as many dimensions as parameters are passed in. The lowerbound for each dimension is set to zero, the count to the parameter value.

        Parameters:
        size - array of dimension size
        Returns:
        SAFEARRAYWrapper or NULL if creation fails.
      • createSafeArray

        public static OaIdl.SAFEARRAY.ByReference createSafeArray​(WTypes.VARTYPE vartype,
                                                                  int... size)
        Create a SAFEARRAY with supplied element type.

        The array will have as many dimensions as parameters are passed in. The lowerbound for each dimension is set to zero, the count to the parameter value.

        Parameters:
        vartype - type of array contents (see Variant.VT_* constants)
        size - array of dimension size
        Returns:
        SAFEARRAYWrapper or NULL if creation fails.
      • putElement

        public void putElement​(Object arg,
                               int... indices)
        Set value at indices in array to arg.

        The supplied argument is copied into the array. If the value is no longer needed, it needs to be freed if not handled automatically.

        Parameters:
        indices - the index, order follows java/C convention
        arg - the arg
      • getElement

        public Object getElement​(int... indices)
        Retrieve the value at the referenced index from the SAFEARRAY.

        The function creates a copy of the value. The values are allocated with native functions and need to be freed accordingly.

        Parameters:
        indices - the index, order follows java/C convention
        Returns:
        the variant
      • destroy

        public void destroy()
        Destroy the underlying SAFEARRAY and free memory
      • close

        public void close()
        Implemented to satisfy Closeable interface, delegates to destroy.
        Specified by:
        close in interface AutoCloseable
        Specified by:
        close in interface Closeable
      • getLBound

        public int getLBound​(int dimension)
        Retrieve lower bound for the selected dimension.

        As in the all the accessor functions, that index is converted to java conventions.

        Parameters:
        dimension - zerobased index
        Returns:
        lower bound for the selected dimension
      • getUBound

        public int getUBound​(int dimension)
        Retrieve upper bound for the selected dimension.

        As in the all the accessor functions, that index is converted to java conventions.

        Parameters:
        dimension - zerobased index
        Returns:
        upper bound for the selected dimension
      • getDimensionCount

        public int getDimensionCount()
        Return number of dimensions of the SAFEARRAY
        Returns:
        number of dimensions of the SAFEARRAY
      • accessData

        public Pointer accessData()
        Lock array and retrieve pointer to data
        Returns:
        Pointer to arraydata
      • unaccessData

        public void unaccessData()
        Unlock array and invalidate the pointer retrieved via SafeArrayAccessData
      • lock

        public void lock()
        Increments the lock count of an array, and places a pointer to the array data in pvData of the array descriptor.
      • unlock

        public void unlock()
        Decrements the lock count of an array so it can be freed or resized
      • redim

        public void redim​(int cElements,
                          int lLbound)
        Changes the right-most (least significant) bound of the specified safe array.
        Parameters:
        cElements -
        lLbound -
      • getVarType

        public WTypes.VARTYPE getVarType()
        Return VARTYPE of the SAFEARRAY
        Returns:
        VARTYPE of the SAFEARRAY
      • getElemsize

        public long getElemsize()
        Get size of one element in bytes
        Returns:
        element size in bytes