添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Direct Known Subclasses:
CallbackReference.AttachOptions , Carbon.EventHotKeyID , Carbon.EventTypeSpec , DBT.DEV_BROADCAST_DEVICEINTERFACE , DBT.DEV_BROADCAST_DEVNODE , DBT.DEV_BROADCAST_HANDLE , DBT.DEV_BROADCAST_HDR , DBT.DEV_BROADCAST_NET , DBT.DEV_BROADCAST_OEM , DBT.DEV_BROADCAST_PORT , DBT.DEV_BROADCAST_VOLUME , DispatchListener , DispatchVTable , DsGetDC.DOMAIN_CONTROLLER_INFO , DsGetDC.DS_DOMAIN_TRUSTS , DsGetDC.PDOMAIN_CONTROLLER_INFO , Guid.GUID , LMAccess.GROUP_INFO_0 , LMAccess.GROUP_INFO_1 , LMAccess.GROUP_INFO_2 , LMAccess.GROUP_INFO_3 , LMAccess.GROUP_USERS_INFO_0 , LMAccess.LOCALGROUP_INFO_0 , LMAccess.LOCALGROUP_INFO_1 , LMAccess.LOCALGROUP_USERS_INFO_0 , LMAccess.USER_INFO_0 , LMAccess.USER_INFO_1 , LMAccess.USER_INFO_23 , LowLevelMonitorConfigurationAPI.MC_TIMING_REPORT , MacFileUtils.FileManager.FSRef , NTSecApi.LSA_FOREST_TRUST_BINARY_DATA , NTSecApi.LSA_FOREST_TRUST_DOMAIN_INFO , NTSecApi.LSA_FOREST_TRUST_INFORMATION , NTSecApi.LSA_FOREST_TRUST_RECORD , NTSecApi.LSA_UNICODE_STRING , NTSecApi.PLSA_FOREST_TRUST_INFORMATION , NTSecApi.PLSA_FOREST_TRUST_RECORD , OaIdl.ARRAYDESC , OaIdl.CALLCONV , OaIdl.CURRENCY._CURRENCY , OaIdl.DATE , OaIdl.DECIMAL , OaIdl.DECIMAL._DECIMAL1._DECIMAL1_DECIMAL , OaIdl.DECIMAL._DECIMAL2._DECIMAL2_DECIMAL , OaIdl.DESCKIND , OaIdl.ELEMDESC , OaIdl.ElemDescArg , OaIdl.EXCEPINFO , OaIdl.FUNCDESC , OaIdl.FUNCKIND , OaIdl.IDLDESC , OaIdl.INVOKEKIND , OaIdl.LIBFLAGS , OaIdl.PARAMDESC , OaIdl.PARAMDESCEX , OaIdl.SAFEARRAY , OaIdl.SAFEARRAYBOUND , OaIdl.ScodeArg , OaIdl.SYSKIND , OaIdl.TLIBATTR , OaIdl.TYPEATTR , OaIdl.TYPEDESC , OaIdl.TYPEKIND , OaIdl.VARDESC , OaIdl.VARKIND , OleAuto.DISPPARAMS , Pdh.PDH_COUNTER_PATH_ELEMENTS , Pdh.PDH_RAW_COUNTER , Pdh.PDH_TIME_INFO , PhysicalMonitorEnumerationAPI.PHYSICAL_MONITOR , SetupApi.SP_DEVICE_INTERFACE_DATA , SetupApi.SP_DEVINFO_DATA , ShellAPI.APPBARDATA , ShellAPI.SHFILEOPSTRUCT , Sspi.PSecHandle , Sspi.PSecPkgInfo , Sspi.SecBuffer , Sspi.SecBufferDesc , Sspi.SecHandle , Sspi.SecPkgInfo , Sspi.SECURITY_INTEGER , Structure.FFIType , SystemB.HostCpuLoadInfo , SystemB.HostLoadInfo , SystemB.VMStatistics , SystemB.VMStatistics64 , Tlhelp32.PROCESSENTRY32 , Union , UnknownListener , UnknownVTable , Variant.VARIANT._VARIANT , Variant.VARIANT._VARIANT.__VARIANT.BRECORD , Variant.VariantArg , VerRsrc.VS_FIXEDFILEINFO , Wdm.KEY_BASIC_INFORMATION , WinBase.FILETIME , WinBase.FOREIGN_THREAD_START_ROUTINE , WinBase.MEMORYSTATUSEX , WinBase.OVERLAPPED , WinBase.PROCESS_INFORMATION , WinBase.SECURITY_ATTRIBUTES , WinBase.STARTUPINFO , WinBase.SYSTEM_INFO , WinBase.SYSTEM_INFO.PI , WinBase.SYSTEMTIME , WinBase.TIME_ZONE_INFORMATION , WinCrypt.CRYPTPROTECT_PROMPTSTRUCT , WinCrypt.DATA_BLOB , WinDef.POINT , WinDef.RECT , WinGDI.BITMAP , WinGDI.BITMAPINFO , WinGDI.BITMAPINFOHEADER , WinGDI.DIBSECTION , WinGDI.ICONINFO , WinGDI.PIXELFORMATDESCRIPTOR , WinGDI.RGBQUAD , WinGDI.RGNDATA , WinGDI.RGNDATAHEADER , Winioctl.STORAGE_DEVICE_NUMBER , WinNT.ACEStructure , WinNT.ACL , WinNT.CACHE_DESCRIPTOR , WinNT.EVENTLOGRECORD , WinNT.FILE_NOTIFY_INFORMATION , WinNT.GENERIC_MAPPING , WinNT.LARGE_INTEGER , WinNT.LARGE_INTEGER.LowHigh , WinNT.LUID , WinNT.LUID_AND_ATTRIBUTES , WinNT.MEMORY_BASIC_INFORMATION , WinNT.OSVERSIONINFO , WinNT.OSVERSIONINFOEX , WinNT.PRIVILEGE_SET , WinNT.PSID , WinNT.SECURITY_DESCRIPTOR , WinNT.SECURITY_DESCRIPTOR_RELATIVE , WinNT.SID_AND_ATTRIBUTES , WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION , WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION.AnonymousStructNumaNode , WinNT.SYSTEM_LOGICAL_PROCESSOR_INFORMATION.AnonymousStructProcessorCore , WinNT.TOKEN_GROUPS , WinNT.TOKEN_OWNER , WinNT.TOKEN_PRIVILEGES , WinNT.TOKEN_USER , WinPerf.PERF_DATA_BLOCK , WinPerf.PERF_INSTANCE_DEFINITION , WinRas.RAS_STATS , WinRas.RASCONN , WinRas.RASCONNSTATUS , WinRas.RASCREDENTIALS , WinRas.RASDEVSPECIFICINFO , WinRas.RASDIALEXTENSIONS , WinRas.RASDIALPARAMS , WinRas.RASEAPINFO , WinRas.RASENTRY , WinRas.RASIPADDR , WinRas.RASIPV4ADDR , WinRas.RASIPV6ADDR , WinRas.RASPPPIP , WinRas.RASTUNNELENDPOINT , Winspool.JOB_INFO_1 , Winspool.LPPRINTER_DEFAULTS , Winspool.PRINTER_INFO_1 , Winspool.PRINTER_INFO_4 , Winsvc.SERVICE_STATUS , Winsvc.SERVICE_STATUS_PROCESS , WinUser.BLENDFUNCTION , WinUser.FLASHWINFO , WinUser.GUITHREADINFO , WinUser.HARDWAREINPUT , WinUser.INPUT , WinUser.KBDLLHOOKSTRUCT , WinUser.KEYBDINPUT , WinUser.LASTINPUTINFO , WinUser.MONITORINFO , WinUser.MONITORINFOEX , WinUser.MOUSEINPUT , WinUser.MSG , WinUser.RAWINPUTDEVICELIST , WinUser.SIZE , WinUser.WINDOWINFO , WinUser.WINDOWPLACEMENT , WinUser.WNDCLASSEX , X11.XAnyEvent , X11.XButtonEvent , X11.XCirculateEvent , X11.XCirculateRequestEvent , X11.XClientMessageEvent , X11.XColormapEvent , X11.XConfigureEvent , X11.XConfigureRequestEvent , X11.XCreateWindowEvent , X11.XCrossingEvent , X11.XDestroyWindowEvent , X11.XDeviceByReference , X11.XErrorEvent , X11.XExposeEvent , X11.XFocusChangeEvent , X11.XGCValues , X11.XGraphicsExposeEvent , X11.XGravityEvent , X11.XInputClassInfoByReference , X11.XKeyboardControlRef , X11.XKeyboardStateRef , X11.XKeyEvent , X11.XKeymapEvent , X11.XMapEvent , X11.XMappingEvent , X11.XMapRequestEvent , X11.XModifierKeymapRef , X11.XMotionEvent , X11.XNoExposeEvent , X11.XPoint , X11.XPropertyEvent , X11.XRectangle , X11.Xrender.XRenderDirectFormat , X11.Xrender.XRenderPictFormat , X11.XReparentEvent , X11.XResizeRequestEvent , X11.XSelectionClearEvent , X11.XSelectionEvent , X11.XSelectionRequestEvent , X11.XSetWindowAttributes , X11.XSizeHints , X11.XSizeHints.Aspect , X11.XTextProperty , X11.XUnmapEvent , X11.XVisibilityEvent , X11.XVisualInfo , X11.XWindowAttributes , X11.XWMHints
public abstract class Structure
extends Object
Represents a native structure with a Java peer class. When used as a function parameter or return value, this class corresponds to struct* . When used as a field within another Structure , it corresponds to struct . The tagging interfaces Structure.ByReference and Structure.ByValue may be used to alter the default behavior. Structures may have variable size, but only by providing an array field (e.g. byte[]). See the overview for supported type mappings for struct fields. Structure alignment and type mappings are derived by default from the enclosing interface definition (if any) by using Native.getStructureAlignment(java.lang.Class) and Native.getTypeMapper(java.lang.Class) . Alternatively you can explicitly provide alignment, field order, or type mapping by calling the respective Structure functions in your subclass's constructor.

Structure fields corresponding to native struct fields must be public. If your structure is to have no fields of its own, it must be declared abstract.

You must define getFieldOrder() to return a List of field names (Strings) indicating the proper order of the fields. When dealing with multiple levels of subclasses of Structure, you must add to the list provided by the superclass getFieldOrder() the fields defined in the current class.

In the past, most VMs would return them in a predictable order, but the JVM spec does not require it, so getFieldOrder() is now required to ensure JNA knows the proper order).

Structure fields may additionally have the following modifiers:

  • volatile JNA will not write the field unless specifically instructed to do so via writeField(String) . This allows you to prevent inadvertently overwriting memory that may be updated in real time on another (possibly native) thread.
  • final JNA will overwrite the field via read() , but otherwise the field is not modifiable from Java. Take care when using this option, since the compiler will usually assume all accesses to the field (for a given Structure instance) have the same value. This modifier is invalid to use on J2ME.

    NOTE: Strings are used to represent native C strings because usage of char * is generally more common than wchar_t * . You may provide a type mapper ( example here) if you prefer to use String in place of WString if your native code predominantly uses wchar_t * .

    NOTE: In general, instances of this class are not synchronized.

    Author:
    Todd Fast, [email protected], [email protected]
    static interface Structure.ByReference
    Tagging interface to indicate the address of an instance of the Structure type is to be used within a Structure definition rather than nesting the full Structure contents.
    static interface Structure.ByValue
    Tagging interface to indicate the value of an instance of the Structure type is to be used in function invocations rather than its address.
    (package private) static class Structure.FFIType
    This class auto-generates an ffi_type structure appropriate for a given structure for use by libffi.
    protected static class Structure.StructField (package private) static class Structure.StructureSet
    Avoid using a hash-based implementation since the hash code for a Structure is not immutable.

    Method Summary

    All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method and Description protected void allocateMemory ()
    Attempt to allocate memory if sufficient information is available.
    protected void allocateMemory (int size)
    Provided for derived classes to indicate a different size than the default.
    protected Memory autoAllocate (int size)
    Obtain auto-allocated memory for use with struct represenations.
    autoRead () static void autoRead ( Structure [] ss) autoWrite () static void autoWrite ( Structure [] ss) (package private) static Set busy () protected void cacheTypeInfo ( Pointer p)
    Cache native type information for use in native code.
    protected int calculateSize (boolean force)
    Calculate the amount of native memory required for this structure.
    (package private) int calculateSize (boolean force, boolean avoidFFIType) clear ()
    Clears the native memory associated with this Structure.
    (package private) void conditionalAutoRead ()
    Performs auto-read only if uninitialized.
    boolean dataEquals ( Structure s)
    Return whether the given Structure's native backing data is identical to this one.
    boolean dataEquals ( Structure s, boolean clear)
    Return whether the given Structure's backing data is identical to this one, optionally clearing and re-writing native memory before checking.
    protected void ensureAllocated ()
    Ensure this memory has its size and layout calculated and its memory allocated.
    boolean equals ( Object o) protected int fieldOffset ( String name)
    Returns the calculated offset of the given field.
    (package private) Map fields ()
    Return all fields in this structure (ordered).
    boolean getAutoRead ()
    Returns whether the structure is read from native memory prior to a native function call.
    boolean getAutoWrite ()
    Returns whether the structure is written to native memory after a native function call.
    protected List getFieldList ()
    Look up all fields in this class and superclasses.
    protected abstract List getFieldOrder ()
    Return this Structure's field names in their proper order.
    protected List getFields (boolean force)
    Returns all field names (sorted) provided so far by getFieldOrder()
    (package private) Pointer getFieldTypeInfo ( Structure.StructField f)
    Override to supply native type information for the given field.
    (package private) Object getFieldValue ( Field field)
    Obtain the value currently in the Java field.
    protected int getNativeAlignment ( Class type, Object value, boolean isFirstElement)
    Overridable in subclasses.
    protected int getNativeSize ( Class nativeType)
    Return the native size of the given Java type, from the perspective of this Structure.
    protected int getNativeSize ( Class nativeType, Object value)
    Return the native size of the given Java type, from the perspective of this Structure.
    Pointer getPointer ()
    Return a Pointer object to this structure.
    protected String getStringEncoding ()
    Encoding to use to convert String to native const char* .
    protected int getStructAlignment () (package private) Pointer getTypeInfo () (package private) static Pointer getTypeInfo ( Object obj)
    Exposed for testing purposes only.
    (package private) TypeMapper getTypeMapper () hashCode () static Structure newInstance ( Class type)
    Create a new Structure instance of the given type
    static Structure newInstance ( Class type, Pointer init)
    Create a new Structure instance of the given type, initialized with the given memory.
    read ()
    Reads the fields of the struct from native memory
    Object readField ( String name)
    Force a read of the given field from native memory.
    protected Object readField ( Structure.StructField structField)
    Read the given field and return its value.
    (package private) static Map reading () protected void setAlignType (int alignType)
    Change the alignment of this structure.
    setAutoRead (boolean auto)
    Set whether the structure is read from native memory prior to a native function call.
    setAutoSynch (boolean auto)
    Set whether the structure is automatically synchronized to native memory before and after a native function call.
    setAutoWrite (boolean auto)
    Set whether the structure is written to native memory after a native function call.
    protected void setFieldOrder ( String [] fields)
    Deprecated.
    Use the required method getFieldOrder() instead to indicate the order of fields in this structure.
    protected void setStringEncoding ( String encoding)
    Set the desired encoding to use when writing String fields to native memory.
    size ()
    Returns the size in memory occupied by this Structure.
    (package private) static int size ( Class type)
    Efficiently calculate the size of the given Structure subclass.
    (package private) static int size ( Class type, Structure value)
    Efficiently calculate the size of the given Structure subclass.
    protected void sortFields ( List fields, List names)
    Sort the structure fields according to the given array of names.
    Structure [] toArray (int size)
    Returns a view of this structure's memory as an array of structures.
    Structure [] toArray ( Structure [] array)
    Returns a view of this structure's memory as an array of structures.
    String toString ()
    If jna.dump_memory is true, will include a native memory dump of the Structure's backing memory.
    String toString (boolean debug) (package private) Structure.StructField typeInfoField ()
    Keep track of the largest aggregate field of the union to use for FFI type information.
    (package private) static Structure updateStructureByReference ( Class type, Structure s, Pointer address)
    Only keep the original structure if its native address is unchanged.
    protected void useMemory ( Pointer m)
    Set the memory used by this structure.
    protected void useMemory ( Pointer m, int offset)
    Set the memory used by this structure.
    (package private) void useMemory ( Pointer m, int offset, boolean force)
    Set the memory used by this structure.
    (package private) static void validate ( Class cls)
    Indicate whether the given Structure class can be created by JNA.
    write ()
    Writes the fields of the struct to native memory
    writeField ( String name)
    Write the given field to native memory.
    writeField ( String name, Object value)
    Write the given field value to the field and native memory.
    protected void writeField ( Structure.StructField structField)

    ALIGN_NONE

    public static final int ALIGN_NONE
    No alignment, place all fields on nearest 1-byte boundary
    See Also:
    Constant Field Values

    ALIGN_GNUC

    public static final int ALIGN_GNUC
    validated for 32-bit x86 linux/gcc; align field size, max 4 bytes
    See Also:
    Constant Field Values
    Map fields()
    Return all fields in this structure (ordered). This represents the layout of the structure, and will be shared among Structures of the same class except when the Structure can have a variable size. NOTE: ensureAllocated() must be called prior to calling this method.
    Returns:
    Map of field names to field representations.

    setStringEncoding

    protected void setStringEncoding(String encoding)
    Set the desired encoding to use when writing String fields to native memory.
    Parameters:
    encoding - desired encoding

    getStringEncoding

    protected String getStringEncoding()
    Encoding to use to convert String to native const char* . Defaults to Native.getDefaultStringEncoding() .
    Returns:
    Current encoding

    setAlignType

    protected void setAlignType(int alignType)
    Change the alignment of this structure. Re-allocates memory if necessary. If alignment is ALIGN_DEFAULT , the default alignment for the defining class will be used.
    Parameters:
    alignType - desired alignment type

    autoAllocate

    protected Memory autoAllocate(int size)
    Obtain auto-allocated memory for use with struct represenations.
    Parameters:
    size - desired size
    Returns:
    newly-allocated memory

    useMemory

    protected void useMemory(Pointer m)
    Set the memory used by this structure. This method is used to indicate the given structure is nested within another or otherwise overlaid on some other memory block and thus does not own its own memory.
    Parameters:
    m - Memory to with which to back this Structure .
    protected void useMemory(Pointer m,
                             int offset)
    Set the memory used by this structure. This method is used to indicate the given structure is based on natively-allocated data, nested within another, or otherwise overlaid on existing memory and thus does not own its own memory allocation.
    Parameters:
    m - Base memory to use to back this structure.
    offset - offset into provided memory where structure mapping should start.
    boolean force)
    Set the memory used by this structure. This method is used to indicate the given structure is based on natively-allocated data, nested within another, or otherwise overlaid on existing memory and thus does not own its own memory allocation.
    Parameters:
    m - Native pointer
    offset - offset from pointer to use
    force - ByValue structures normally ignore requests to use a different memory offset; this input is set true when setting a ByValue struct that is nested within another struct.

    ensureAllocated

    protected void ensureAllocated()
    Ensure this memory has its size and layout calculated and its memory allocated.

    allocateMemory

    protected void allocateMemory()
    Attempt to allocate memory if sufficient information is available. Returns whether the operation was successful.

    allocateMemory

    protected void allocateMemory(int size)
    Provided for derived classes to indicate a different size than the default. Returns whether the operation was successful. Will leave memory untouched if it is non-null and not allocated by this class.
    Parameters:
    size - how much memory to allocate

    getPointer

    public Pointer getPointer()
    Return a Pointer object to this structure. Note that if you use the structure's pointer as a function argument, you are responsible for calling write() prior to the call and read() after the call. These calls are normally handled automatically by the Function object when it encounters a Structure argument or return value. The returned pointer may not have meaning for Structure.ByValue structure representations.
    Returns:
    Native pointer representation of this structure.

    fieldOffset

    protected int fieldOffset(String name)
    Returns the calculated offset of the given field.
    Parameters:
    name - field to examine
    Returns:
    return offset of the given field

    readField

    public Object readField(String name)
    Force a read of the given field from native memory. The Java field will be updated from the current contents of native memory.
    Parameters:
    name - field to be read
    Returns:
    the new field value, after updating
    Throws:
    IllegalArgumentException - if no field exists with the given name

    getFieldValue

    Object getFieldValue(Field field)
    Obtain the value currently in the Java field. Does not read from native memory.
    Parameters:
    field - field to look up
    Returns:
    current field value (Java-side only)

    updateStructureByReference

    static Structure updateStructureByReference(Class type,
                                                Structure s,
                                                Pointer address)
    Only keep the original structure if its native address is unchanged. Otherwise replace it with a new object.
    Parameters:
    type - Structure subclass
    s - Original Structure object
    address - the native struct *
    Returns:
    Updated Structure.ByReference object

    readField

    protected Object readField(Structure.StructField structField)
    Read the given field and return its value. The Java field will be updated from the contents of native memory.
    Parameters:
    structField - field to be read
    Returns:
    value of the requested field

    writeField

    public void writeField(String name)
    Write the given field to native memory. The current value in the Java field will be translated into native memory.
    Parameters:
    name - which field to synch
    Throws:
    IllegalArgumentException - if no field exists with the given name
    public void writeField(String name,
                           Object value)
    Write the given field value to the field and native memory. The given value will be written both to the Java field and the corresponding native memory.
    Parameters:
    name - field to write
    value - value to write
    Throws:
    IllegalArgumentException - if no field exists with the given name

    getFieldOrder

    protected abstract List getFieldOrder()
    Return this Structure's field names in their proper order. For example, protected List getFieldOrder() { return Arrays.asList(new String[] { ... }); IMPORTANT When deriving from an existing Structure subclass, ensure that you augment the list provided by the superclass, e.g. protected List getFieldOrder() { List fields = new ArrayList(super.getFieldOrder()); fields.addAll(Arrays.asList(new String[] { ... })); return fields; Field order must be explicitly indicated, since the field order as returned by Class.getFields() is not guaranteed to be predictable.
    Returns:
    ordered list of field names

    setFieldOrder

    protected final void setFieldOrder(String[] fields)
    Deprecated. Use the required method getFieldOrder() instead to indicate the order of fields in this structure.
    Force a compile-time error on the old method of field definition
    Parameters:
    fields - ordered array of field names
    protected void sortFields(List fields,
                              List names)
    Sort the structure fields according to the given array of names.
    Parameters:
    fields - list of fields to be sorted
    names - list of names representing the desired sort order

    getFieldList

    protected List getFieldList()
    Look up all fields in this class and superclasses.
    Returns:
    ordered list of public Field available on this Structure class.

    getFields

    protected List getFields(boolean force)
    Returns all field names (sorted) provided so far by getFieldOrder()
    Parameters:
    force - set if results are required immediately
    Returns:
    null if not yet able to provide fields, and force is false.
    Throws:
    Error - if force is true and field order data not yet specified and can't be generated automatically.

    calculateSize

    protected int calculateSize(boolean force)
    Calculate the amount of native memory required for this structure. May return CALCULATE_SIZE if the size can not yet be determined (usually due to fields in the derived class not yet being initialized). If the force parameter is true will throw an IllegalStateException if the size can not be determined.
    Parameters:
    force - whether to force size calculation
    Returns:
    calculated size, or CALCULATE_SIZE if the size can not yet be determined.
    Throws:
    IllegalStateException - an array field is not initialized or the size can not be determined while force is true .
    IllegalArgumentException - when an unsupported field type is encountered
    static int size(Class type)
    Efficiently calculate the size of the given Structure subclass.
    Parameters:
    type - Structure subclass to check
    Returns:
    native size of the given Structure subclass
    static int size(Class type,
                    Structure value)
    Efficiently calculate the size of the given Structure subclass.
    Parameters:
    type - Structure subclass to check
    value - optional instance of the given class
    Returns:
    native size of the Structure subclass
    Parameters:
    force - whether to force size calculation.
    avoidFFIType - set false in certain situations to avoid recursive type lookup.
    Returns:
    calculated size, or CALCULATE_SIZE if there is not yet enough information to perform the size calculation.
    boolean isFirstElement)
    Overridable in subclasses. Calculate the appropriate alignment for a field of a given type within this struct.
    Parameters:
    type - field type
    value - field value, if available
    isFirstElement - is this field the first element in the struct?
    Returns:
    the native byte alignment

    toString

    public String toString()
    If jna.dump_memory is true, will include a native memory dump of the Structure's backing memory.
    Overrides:
    toString in class Object
    Returns:
    String representation of this object.
    Parameters:
    debug - If true, will include a native memory dump of the Structure's backing memory.
    Returns:
    String representation of this object.

    toArray

    public Structure[] toArray(Structure[] array)
    Returns a view of this structure's memory as an array of structures. Note that this Structure must have a public, no-arg constructor. If the structure is currently using auto-allocated Memory backing, the memory will be resized to fit the entire array.
    Parameters:
    array - Structure[] object to populate
    Returns:
    array of Structure mapped onto the available memory

    toArray

    public Structure[] toArray(int size)
    Returns a view of this structure's memory as an array of structures. Note that this Structure must have a public, no-arg constructor. If the structure is currently using auto-allocated Memory backing, the memory will be resized to fit the entire array.
    Parameters:
    size - desired number of elements
    Returns:
    array of Structure (individual elements will be of the appropriate type, as will the Structure[]).

    dataEquals

    public boolean dataEquals(Structure s)
    Return whether the given Structure's native backing data is identical to this one.
    Parameters:
    s - Structure to compare
    Returns:
    equality result
    public boolean dataEquals(Structure s,
                              boolean clear)
    Return whether the given Structure's backing data is identical to this one, optionally clearing and re-writing native memory before checking.
    Parameters:
    s - Structure to compare
    clear - whether to clear native memory
    Returns:
    equality result

    cacheTypeInfo

    protected void cacheTypeInfo(Pointer p)
    Cache native type information for use in native code.
    Parameters:
    p - Native pointer to the type information

    getFieldTypeInfo

    Pointer getFieldTypeInfo(Structure.StructField f)
    Override to supply native type information for the given field.
    Parameters:
    f - internal field representation
    Returns:
    Native pointer to the corresponding type information

    setAutoSynch

    public void setAutoSynch(boolean auto)
    Set whether the structure is automatically synchronized to native memory before and after a native function call. Convenience method for boolean auto = ...; setAutoRead(auto); setAutoWrite(auto); For extremely large or complex structures where you only need to access a small number of fields, you may see a significant performance benefit by avoiding automatic structure reads and writes. If auto-read and -write are disabled, it is up to you to ensure that the Java fields of interest are synched before and after native function calls via readField(String) and writeField(String,Object) . This is typically most effective when a native call populates a large structure and you only need a few fields out of it. After the native call you can call readField(String) on only the fields of interest.
    Parameters:
    auto - whether to automatically synch with native memory.

    setAutoRead

    public void setAutoRead(boolean auto)
    Set whether the structure is read from native memory prior to a native function call.
    Parameters:
    auto - whether to automatically synch from native memory.

    getAutoRead

    public boolean getAutoRead()
    Returns whether the structure is read from native memory prior to a native function call.
    Returns:
    whether automatic synch from native memory is enabled.

    setAutoWrite

    public void setAutoWrite(boolean auto)
    Set whether the structure is written to native memory after a native function call.
    Parameters:
    auto - whether to automatically synch to native memory.

    getAutoWrite

    public boolean getAutoWrite()
    Returns whether the structure is written to native memory after a native function call.
    Returns:
    whether automatic synch to native memory is enabled.
    public static Structure newInstance(Class type,
                                        Pointer init)
                                 throws IllegalArgumentException
    Create a new Structure instance of the given type, initialized with the given memory.
    Parameters:
    type - desired Structure type
    init - initial memory
    Returns:
    the new instance
    Throws:
    IllegalArgumentException - if the instantiation fails

    newInstance

    public static Structure newInstance(Class type)
                                 throws IllegalArgumentException
    Create a new Structure instance of the given type
    Parameters:
    type - desired Structure type
    Returns:
    the new instance
    Throws:
    IllegalArgumentException - if the instantiation fails

    typeInfoField

    Structure.StructField typeInfoField()
    Keep track of the largest aggregate field of the union to use for FFI type information.
    Returns:
    which field to use to obtain FFI type information

    getNativeSize

    protected int getNativeSize(Class nativeType)
    Return the native size of the given Java type, from the perspective of this Structure.
    Parameters:
    nativeType - field type to examine
    Returns:
    native size (in bytes) of the requested field type
    protected int getNativeSize(Class nativeType,
                                Object value)
    Return the native size of the given Java type, from the perspective of this Structure.
    Parameters:
    nativeType - field type to examine
    value - instance of the field type
    Returns:
    native size (in bytes) of the requested field type

    validate

    static void validate(Class cls)
    Indicate whether the given Structure class can be created by JNA.
    Parameters:
    cls - Structure subclass to check
  •