我正在为移动广告 SDK 创建一个 OpenFL 扩展,但我很难弄清楚一些 CFFI 的东西。
基本上,我试图将 Haxe 对象传递给 C++,然后从 C++ 调用该对象的方法。这样做的目的是作为事件侦听器,因此当 C++ 中发生某些事情时,我会在该对象上调用回调以通知 Haxe 代码。
我知道如何使用 Lime 的 Android JNI 东西用 Java 做到这一点。使用JNI 类型签名看起来像这样:
var setCallbackListener = JNI.createStaticMethod("com.test.myextension", "setCallbackListener", "(Lorg/haxe/lime/HaxeObject;)V");
var listener = new MyCallbackListener(); //implements `onSomething`
setCallbackListener(listener); //pass the listener to the Java side
然后从 Java 端,我可以onSomething
像这样调用函数:
public static void setCallbackListener(HaxeObject listener){
listener.call0("onSomething"); //call a function called "onSomething" with zero arguments
}
这很有效,这就是我为 Android 做的方式。对于 iOS,我正在尝试做同样的事情,但使用 hxcpp。
我知道从 Haxe 调用 C++ 函数的一般过程,使用cpp.Lib.load
方式与上面的 JNI api 类似。但是,一旦我value
在 C++ 端获得了一个类型,我不知道如何调用它的成员函数。
例如,假设我的 C++ 函数如下所示:
#include <hx/CFFI.h>
static void setCallbackListener (value listener) {
//...
}
DEFINE_PRIM (setCallbackListener, 1);
然后我将如何调用函数“onSomething” listener
?