blob: 8d9ab59e1d34cf001e87dee8bfea67ed7d81b583 [file] [edit]
#include <stdio.h>
#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;
}