Class Function
An abstraction for a native function pointer. An instance of
Function represents a pointer to some native function.
invoke(Class,Object[],Map) is the primary means to call
the function.
C_CONVENTIONUse C calling convention (default)ALT_CONVENTIONUse alternate calling convention (e.g. stdcall)THROW_LAST_ERRORThrow aLastErrorExceptionif the native function sets the system error to a non-zero value (errno or GetLastError). Setting this flag will cause the system error to be cleared prior to native function invocation.
- Author:
- Sheng Liang, originator, Todd Fast, suitability modifications, Timothy Wall
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceAny argument which implements this interface will have theFunction.PostCallRead.read()method called immediately after function invocation. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intFirst alternate convention (currently used only for w32 stdcall).static final intStandard C calling convention.(package private) final int(package private) final String(package private) static final Integer(package private) static final Integerstatic final intMaximum number of arguments supported by a JNA function call.(package private) static final StringFor internal JNA use.static final intWhether to throw an exception if last error is non-zero after call.static final intMask for number of fixed args (1-3) for varargs calls. -
Constructor Summary
ConstructorsConstructorDescriptionFunction(NativeLibrary library, String functionName, int callFlags, String encoding) Create a newFunctionthat is linked with a native function that follows the given calling convention.Create a newFunctionthat is linked with a native function that follows the given calling convention. -
Method Summary
Modifier and TypeMethodDescription(package private) static Object[]concatenateVarArgs(Object[] inArgs) Concatenate varargs with normal args to obtain a simple argument array.booleanTwo function pointers are equal if they share the same peer address and calling convention.(package private) static intVarargs are only supported on 1.5+.intstatic FunctionObtain aFunctionrepresenting a native function pointer.static FunctiongetFunction(Pointer p, int callFlags) Obtain aFunctionrepresenting a native function pointer.static FunctiongetFunction(Pointer p, int callFlags, String encoding) Obtain aFunctionrepresenting a native function pointer.static FunctiongetFunction(String libraryName, String functionName) Obtain aFunctionrepresenting a native function that follows the standard "C" calling convention.static FunctiongetFunction(String libraryName, String functionName, int callFlags) Obtain aFunctionrepresenting a native function.static FunctiongetFunction(String libraryName, String functionName, int callFlags, String encoding) Obtain aFunctionrepresenting a native function.getName()inthashCode()Provide a unique hash code forFunctions which are equivalent.Invoke the native function with the given arguments, returning the native result as an Object.Invoke the native function with the given arguments, returning the native result as an Object.voidCall the native function being represented by this object(package private) Object(package private) Object(package private) Objectinvoke(Method invokingMethod, Class<?>[] paramTypes, Class<?> returnType, Object[] inArgs, Map<String, ?> options) Invoke the native function with the given arguments, returning the native result as an Object.doubleinvokeDouble(Object[] args) Convenience method forinvoke(Double.class, args).floatinvokeFloat(Object[] args) Convenience method forinvoke(Float.class, args).intConvenience method forinvoke(Integer.class, args).longinvokeLong(Object[] args) Convenience method forinvoke(Long.class, args).invokeObject(Object[] args) Convenience method forinvokeObject(Object.class, args).invokePointer(Object[] args) Convenience method forinvoke(Pointer.class, args).invokeString(Object[] args, boolean wide) Convenience method forinvoke(String.class, args)orinvoke(WString.class, args)voidinvokeVoid(Object[] args) Convenience method forinvoke(Void.class, args).(package private) static booleanVarargs are only supported on 1.5+.toString()Provide a human-readable representation of this object.(package private) static BooleanvalueOf(boolean b) Implementation of Boolean.valueOf for older VMs.Methods inherited from class com.sun.jna.Pointer
clear, createConstant, createConstant, dump, getByte, getByteArray, getByteBuffer, getChar, getCharArray, getDouble, getDoubleArray, getFloat, getFloatArray, getInt, getIntArray, getLong, getLongArray, getNativeLong, getPointer, getPointerArray, getPointerArray, getShort, getShortArray, getString, getString, getStringArray, getStringArray, getStringArray, getStringArray, getValue, getWideString, getWideStringArray, getWideStringArray, indexOf, nativeValue, nativeValue, read, read, read, read, read, read, read, read, setByte, setChar, setDouble, setFloat, setInt, setLong, setMemory, setNativeLong, setPointer, setShort, setString, setString, setString, setValue, setWideString, share, share, write, write, write, write, write, write, write, write
-
Field Details
-
MAX_NARGS
Maximum number of arguments supported by a JNA function call.- See Also:
-
C_CONVENTION
Standard C calling convention.- See Also:
-
ALT_CONVENTION
First alternate convention (currently used only for w32 stdcall).- See Also:
-
THROW_LAST_ERROR
Whether to throw an exception if last error is non-zero after call.- See Also:
-
USE_VARARGS
Mask for number of fixed args (1-3) for varargs calls.- See Also:
-
INTEGER_TRUE
-
INTEGER_FALSE
-
encoding
-
callFlags
final int callFlags -
options
-
OPTION_INVOKING_METHOD
For internal JNA use.- See Also:
-
-
Constructor Details
-
Function
Function(NativeLibrary library, String functionName, int callFlags, String encoding) Create a newFunctionthat is linked with a native function that follows the given calling convention.The allocated instance represents a pointer to the named native function from the supplied library, called with the given calling convention.
- Parameters:
library-NativeLibraryin which to find the functionfunctionName- Name of the native function to be linked withcallFlags- Function call flagsencoding- Encoding for conversion between Java and native strings.- Throws:
UnsatisfiedLinkError- if the given function name is not found within the library.
-
Function
Create a newFunctionthat is linked with a native function that follows the given calling convention.The allocated instance represents a pointer to the given function address, called with the given calling convention.
- Parameters:
functionAddress- Address of the native functioncallFlags- Function call flagsencoding- Encoding for conversion between Java and native strings.
-
-
Method Details
-
getFunction
Obtain aFunctionrepresenting a native function that follows the standard "C" calling convention.The allocated instance represents a pointer to the named native function from the named library, called with the standard "C" calling convention.
- Parameters:
libraryName- Library in which to find the native functionfunctionName- Name of the native function to be linked with- Throws:
UnsatisfiedLinkError- if the library is not found or the given function name is not found within the library.
-
getFunction
Obtain aFunctionrepresenting a native function.The allocated instance represents a pointer to the named native function from the named library.
- Parameters:
libraryName- Library in which to find the functionfunctionName- Name of the native function to be linked withcallFlags- Function call flags- Throws:
UnsatisfiedLinkError- if the library is not found or the given function name is not found within the library.
-
getFunction
public static Function getFunction(String libraryName, String functionName, int callFlags, String encoding) Obtain aFunctionrepresenting a native function.The allocated instance represents a pointer to the named native function from the named library.
- Parameters:
libraryName- Library in which to find the functionfunctionName- Name of the native function to be linked withcallFlags- Function call flagsencoding- Encoding to use for conversion between Java and native strings.- Throws:
UnsatisfiedLinkError- if the library is not found or the given function name is not found within the library.
-
getFunction
Obtain aFunctionrepresenting a native function pointer. In general, this function should be used by dynamic languages; Java code should allow JNA to bind to a specific Callback interface instead by defining a return type or Structure field type.The allocated instance represents a pointer to the native function pointer.
- Parameters:
p- Native function pointer
-
getFunction
Obtain aFunctionrepresenting a native function pointer. In general, this function should be used by dynamic languages; Java code should allow JNA to bind to a specific Callback interface instead by defining a return type or Structure field type.The allocated instance represents a pointer to the native function pointer.
- Parameters:
p- Native function pointercallFlags- Function call flags
-
getFunction
Obtain aFunctionrepresenting a native function pointer. In general, this function should be used by dynamic languages; Java code should allow JNA to bind to a specific Callback interface instead by defining a return type or Structure field type.The allocated instance represents a pointer to the native function pointer.
- Parameters:
p- Native function pointercallFlags- Function call flagsencoding- Encoding to use for conversion between Java and native strings.
-
getName
-
getCallingConvention
public int getCallingConvention() -
invoke
Invoke the native function with the given arguments, returning the native result as an Object. -
invoke
Invoke the native function with the given arguments, returning the native result as an Object. -
invoke
Object invoke(Method invokingMethod, Class<?>[] paramTypes, Class<?> returnType, Object[] inArgs, Map<String, ?> options) Invoke the native function with the given arguments, returning the native result as an Object. This method can be called if invoking method and parameter types are already at hand. When callinginvoke(Class, Object[], Map), the method has to be in the options under keyOPTION_INVOKING_METHOD. -
invoke
-
invoke
-
invoke
Call the native function being represented by this object- Parameters:
args- Arguments to pass to the native function
-
toString
Provide a human-readable representation of this object. -
invokeObject
Convenience method forinvokeObject(Object.class, args). -
invokePointer
Convenience method forinvoke(Pointer.class, args). -
invokeString
Convenience method forinvoke(String.class, args)orinvoke(WString.class, args)- Parameters:
args- Arguments passed to native functionwide- Whether the return value is of typewchar_t*; if false, the return value is of typechar*.
-
invokeInt
Convenience method forinvoke(Integer.class, args). -
invokeLong
Convenience method forinvoke(Long.class, args). -
invokeFloat
Convenience method forinvoke(Float.class, args). -
invokeDouble
Convenience method forinvoke(Double.class, args). -
invokeVoid
Convenience method forinvoke(Void.class, args). -
equals
Two function pointers are equal if they share the same peer address and calling convention. -
hashCode
public int hashCode()Provide a unique hash code forFunctions which are equivalent. -
concatenateVarArgs
Concatenate varargs with normal args to obtain a simple argument array. -
isVarArgs
Varargs are only supported on 1.5+. -
fixedArgs
Varargs are only supported on 1.5+. -
valueOf
Implementation of Boolean.valueOf for older VMs.
-