Зарегистрируйте функцию обратного вызова на go с android (JNI или JNA) - PullRequest
0 голосов
/ 26 марта 2020

Уважаемые, я пытаюсь запустить 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?

...