标签: gravity-language

将 Gravity(一种脚本语言)调用转换为原生 C 函数调用

我目前正在寻找一种更简洁的方法来从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

5
推荐指数
1
解决办法
108
查看次数