Package com.sun.jna
Interface InvocationMapper
- 
 public interface InvocationMapperProvide a method for overriding how a given function is invoked. An instance of this interface may be provided toNative.load(String, Class, java.util.Map)as an entry in the options map with keyLibrary.OPTION_INVOCATION_MAPPER.This is useful for implementing inlined functions, or functions which are actually C preprocessor macros. Given a native library and JNA interface method, the mapper may provide a handler which implements the desired functionality (which may or may not actually make use of a native method). For example, the GNU C library remaps the statfunction into a call to_xstatwith a slight rearrangement of arguments. A mapper for the GNU C library might look like the following:
 
 Another situation is where a header provides a function-like macro or inline function definition.new InvocationMapper() { public InvocationHandler getInvocationHandler(NativeLibrary lib, Method m) { if (m.getName().equals("stat")) { final Function f = lib.getFunction("_xstat"); return new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) { Object[] newArgs = new Object[args.length+1]; System.arraycopy(args, 0, newArgs, 1, args.length); newArgs[0] = Integer.valueOf(3); // _xstat version return f.invoke(newArgs); } }; } return null; } }// Original C code (macro and inline variations) #define allocblock(x) malloc(x * 1024) static inline void* allocblock(size_t x) { return malloc(x * 1024); } // Invocation mapping new InvocationMapper() { public InvocationHandler getInvocationHandler(NativeLibrary lib, Method m) { if (m.getName().equals("allocblock")) { final Function f = lib.getFunction("malloc"); return new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) { args[0] = ((Integer)args[0]).intValue() * 1024; return f.invoke(newArgs); } }; } return null; } }- Author:
- twall
 
- 
- 
Method SummaryAll Methods Instance Methods Abstract Methods Modifier and Type Method Description java.lang.reflect.InvocationHandlergetInvocationHandler(NativeLibrary lib, java.lang.reflect.Method m)Return anInvocationHandlerresponsible for handling the invocation of the given method, ornullif the default handling should be used.
 
- 
- 
- 
Method Detail- 
getInvocationHandlerjava.lang.reflect.InvocationHandler getInvocationHandler(NativeLibrary lib, java.lang.reflect.Method m) Return anInvocationHandlerresponsible for handling the invocation of the given method, ornullif the default handling should be used. Note that the result of a call to this method with a given library and method may be cached.- Parameters:
- lib- Target library
- m- Original JNA interface method that was invoked.
 
 
- 
 
-