Idris:如何从Vala / C调用Idris函数并将字符串返回给C / Vala

时间:2019-09-05 17:02:28

标签: vala idris

我有这个玩具 project:

对于UI,我使用编译为C的Vala代码。因此,我可以在来自Idris的UI中显示一条消息。

在Idris ans Vala / C方面,我都具有将指针设置为Idris函数的方法。因此,在Vala代码中,您可以看到:

global::afni = fn;

设置带有指向Idris函数的指针的全局变量。 稍后在另一个Vala方法中,我调用:

    int res = global::afni(0);
    string da_label = @"blah $res";
    Gtk.Label label = new Gtk.Label (da_label);

因此,我调用了comFn函数,该函数是通过存储在global :: afni中的指针找到的,到目前为止,它似乎可以处理整数。

但是如何使它与字符串配合使用?

我尝试了各种方法来更改类型并返回字符串作为参数,并得到与无效指针有关的错误

  

free():无效的指针

  

munmap_chunk():无效的指针

1 个答案:

答案 0 :(得分:2)

Vala具有所有权转移的概念。当一个函数返回一个字符串时,Vala假定一旦完成使用它就负责释放它。 Idris FFI看起来像是在VM内分配所有数据并永远对其进行管理。

您可能需要告诉Vala返回类型为unowned string而不是string。这将阻止Vala尝试释放它。