我有一个如下所示的 C API:
typedef void (*cprcen_channel_callback) (CPRC_abuf *abuf, void *user_data);
int CPRCEN_engine_set_callback(CPRCEN_engine *eng, CPRCEN_channel_handle chan,
void *userdata, cprcen_channel_callback callback);
如您所见,该CPRCEN_engine_set_callback
函数在回调之前获取用户数据,而默认情况下,Vala 希望它在回调之后。我知道CCode
属性的delegate_target_pos
参数,但是无论我指定什么位置,该userdata
值都会作为第一个参数而不是生成的函数调用中的第三个参数提供。我似乎无法理解 Vala 的参数定位逻辑。
以下是我希望绑定最终的样子:
[CCode(cname = "cprcen_channel_callback", has_target = true)]
public delegate void ChannelCallback(AudioBuffer abuf);
[Compact]
[CCode(cname = "CPRCEN_engine")]
public class Engine {
[CCode(cname = "CPRCEN_engine_set_callback")]
public int set_channel_callback(ChannelHandle chan, ChannelCallback callback);
}
我该如何进行这项工作?