#include #include #include static void closure (ffi_cif* cif, void* resp, void** args, void* userdata) { printf ("arg: %s\n", (char *) args[0]); * (char *) resp = * strdup("test dos"); } typedef char * (*callback_type) (char *); int main (void) { ffi_cif cif; ffi_closure cl; ffi_type *args[1]; char *res, *tmp; args[0] = &ffi_type_pointer; if (FFI_OK != ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ffi_type_pointer, args)) { printf ("couldn't prepare cif\n"); return 1; } if (FFI_OK != ffi_prep_closure(&cl, &cif, closure, NULL)) { printf ("couldn't prepare closure\n"); return 1; } res = ((callback_type) &cl) ("test uno"); printf("res: %s\n", res); return 0; }