gpt4 book ai didi

java - 如何将cpp回调函数指针发送到java

转载 作者:搜寻专家 更新时间:2023-11-01 09:00:42 24 4
gpt4 key购买 nike

我正在开发用 cpp (cocos2dx) 编写的 android 应用程序现在我正在做一个必须用 java 实现的 facebook 模块。

facebook 调用是异步的,所以我不知道操作何时完成,除非我从 java 部分回调到 cpp。

例如:

JNI 部分应该是这样的:

void CCAndroidApplication::login2Facebook()
{
JniMethodInfo minfo;
if(JniHelper::getStaticMethodInfo(minfo,
"org/cocos2dx/example/myandroidtest",
"login2Facebook",
"(**POINTER TO CALLBACK METHOD DidLogin()**)V"))
{
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);
minfo.env->DeleteLocalRef(minfo.classID);
}
}

Java 部分应该是这样的:

public static void login2Facebook(**POINTER TO native CALLBACK METHOD DidLogin()**) 
Session.openActiveSession(me, true, new Session.StatusCallback()
{
@Override
public void call(Session session, SessionState state, Exception exception)
{
mSession = session;
if (session.isOpened())
{
Request.executeMeRequestAsync(session, new Request.GraphUserCallback()
{
@Override
public void onCompleted(GraphUser user, Response response)
{
if (user != null)
{
**Call nativeDidLogin()**;
}
}
});
}
}
});
}

如果我可以发送包含像这样的方法的cpp对象也很好

class delgateMethods
{
public:
void didLogin();
}

并从 java 中调用它。

我的问题是:是否可以通过 JNI 发送指向函数的指针并在 java 部分调用它?

谢谢

最佳答案

如果我理解正确,像这样的界面应该可以满足您对 JavaCPP 的需求。 :

@Platform(library="Facebook")
public class Facebook {
public static class DidLogin extends FunctionPointer {
public native void call();
}

public static class Login2Facebook extends FunctionPointer {
public @Name("login2Facebook") void call(DidLogin didLogin) {
didLogin.call()
}
}
}

我们可以从 C/C++ 中按名称调用 login2Facebook():

#include "jniFacebook.h"
void didLogin() { /* Did we? */ }
int main() {
JavaCPP_init(0, NULL); // or initialize the JVM some other way
login2Facebook(didLogin);
JavaCPP_uninit();
}

关于java - 如何将cpp回调函数指针发送到java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15195649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com