我目前正在寻找一种更简洁的方法来从Gravity脚本语言调用本机 C 函数。
到目前为止,最简单的例子是这个:
int add(int lhs, int rhs) {
return lhs + rhs;
}
static void gravity_wrap_add(
gravity_vm* vm,
gravity_value_t* args, uint32_t nargs,
uint32_t retIndex, void* data
) {
int lhs, rhs, rt;
// Unwrap
lhs = VALUE_AS_INT(args[1]);
rhs = VALUE_AS_INT(args[2]);
// Perform call, capture return
rt = add(lhs, rhs);
// Forward the return
gravity_vm_setslot(vm, VALUE_FROM_INT(rt), retIndex);
}
Run Code Online (Sandbox Code Playgroud)
通过使用 C++ (98) 模板或 C 预处理器魔术,是否有生成包装函数的方法?
上面包装函数的一个非常非常复杂的例子是这个:
static void gravity_wrap_add(
gravity_vm* vm,
gravity_value_t* args, uint32_t nargs,
uint32_t retIndex, void* …Run Code Online (Sandbox Code Playgroud) c c++ scripting-language calling-convention gravity-language