Ejemplo n.º 1
0
 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);
 }