我正在寻找一个project,目的是将Cocoa API暴露给OCaml。该代码包含一个函数,该函数具有两个值,其中提到了返回类型。
CAMLprim value ml_NSWindow_center(value win_v)
{
CAMLparam1(win_v);
NSWindow *win = NSWindow_val(win_v);
[win center];
CAMLreturn(Val_unit);
}
有可能吗?或那不是返回类型。
答案 0 :(得分:2)
CAMLprim
似乎根本不是一种类型,而是该函数的链接/存储类-似乎#define
被填充为我发现的某些标头中的空字符串。真正的返回类型是value
,它是整数类型的typedef
。
答案 1 :(得分:1)
对于documentation,对于返回为CAMLprim value
的任何函数
此函数必须具有返回类型CAMLprim值,并且其参数类型必须为value。 OCaml提供给C函数的所有参数均为类型值。 include头提供转换宏,以将类型值转换为C本机类型。在这种情况下,要转换为C整数,则该宏为Int_val()。 然后,由于OCaml函数的返回值是单位,因此C函数必须返回一个单位,这是通过宏Val_unit完成的。