private void apply(org.bridj.Pointer<?> f, Object... args) { args = resolvePointers(args); Type[] classes = new Type[args.length]; for (int i = 0; i < classes.length; i++) { classes[i] = args[i].getClass(); if (args[i] instanceof String) { args[i] = Pointer.pointerToString(args[i].toString(), Pointer.StringType.C, null); classes[i] = Pointer.class; } if (args[i] instanceof Pointer) { // for all subclasses of Pointer classes[i] = Pointer.class; } // TODO is there a cleaner way (e.g. removing a layer, instead of adding one) ??? if (args[i] instanceof Float) { classes[i] = float.class; } if (args[i] instanceof Double) { classes[i] = double.class; } if (args[i] instanceof Integer) { classes[i] = int.class; } if (args[i] instanceof Long) { classes[i] = long.class; } if (args[i] instanceof Boolean) { classes[i] = boolean.class; } // System.err.println(" == "+classes[i]+" => "+args[i].getClass()+" => "+args[i]); } final DynamicFunction<Object> asDynamicFunction = f.asDynamicFunction(null, Void.TYPE, classes); asDynamicFunction.apply(args); }