Уважаемые, я пытаюсь запустить go -библиотеку (build to aarch64) на android. И хотите зарегистрировать функцию обратного вызова на go. Моя идея передать "Обратный вызов" через небезопасный указатель, и unmarshall и использовать на go.
public class MainActivity {
public interface lib extends Library {
//register callback on go side. passing Callback function.
void onReceive(Callback cb);
}
// this is callback which is want to register to go.
private static Callback cb = new Callback() {
public void receive(String message) {
//do something
}
}
@Override
protected void onCreate() {
final lib myLib = Native.loadLibrary("myLib", lib.class);
myLib.onReceive(cb); // I'm not sure. Is it possible?
}
}
А теперь, на Go.
package main
import (
"C"
"unsafe"
)
var callback func
//export
func onReceive(fn unsafe.Pointer) {
// I think, can use if convert unsafe pointer to func.
// But, I can't find way.
// callback = (*func)(unsafe.Pointer(fn)) ?
}
func doSomething() {
// do something.
// and callback.
// callback(C.CString("this is from go!")
}
Как конвертировать указатель к веселью c?