#include #include "callback.h" /* * The callback function. Prints the null-terminated string at the given * location in the instance's exported memory. */ void print(w2c_callback* instance, uint32_t ptr) { puts(w2c_callback_memory(instance)->data + ptr); } int main(int argc, char** argv) { /* Initialize the Wasm runtime. */ wasm_rt_init(); /* Instantiate the callback module. */ w2c_callback inst; wasm2c_callback_instantiate(&inst); /* * Call the module's "set_print_function" function, which takes a funcref to * the callback. A funcref has three members: the function type (which can be * looked up with "Z_callback_get_func_type"), a pointer to the function, and * a module instance pointer that will be passed to the function when called. */ wasm_rt_func_type_t fn_type = wasm2c_callback_get_func_type(1, 0, WASM_RT_I32); wasm_rt_funcref_t fn_ref = { fn_type, (wasm_rt_function_ptr_t)print, {NULL}, &inst}; w2c_callback_set_print_function(&inst, fn_ref); /* "say_hello" uses the previously installed callback. */ w2c_callback_say_hello(&inst); /* Free the module instance and the Wasm runtime state. */ wasm2c_callback_free(&inst); wasm_rt_free(); return 0; }