栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将Java函数注册为C函数中的回调

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将Java函数注册为C函数中的回调

我记得我也曾在SWIG手册中对此参考挠头。

您可以按以下步骤进行操作,而无需使用深奥的功能:

  • 您需要一种将传入的C回调分派到Java中的机制。为此,您需要调用的对象的对象ID和处理程序的方法ID。在您的C注册帮助器中,为这些创建全局引用,并缓存它们以供回调使用。

  • 对于要作为参数传递给java回调的所有内容,您还都需要一个类ID和构造方法ID。您还想缓存那些全局引用。

  • 在回调的C部分中,查找您的方法ID,构造参数并调用Java。

  • 回调进入的线程需要附加到Java VM(使用JNI函数AttachCurrentThread())。这是从中获取JNIEnv指针的地方。该指针仅在您从中调用AttachCurrentThread()的线程的上下文中有效!这意味着,如果有多个线程传入回调,则需要将JNIEnv *缓存在线程本地存储中。

  • 确保从JNI函数返回后检查返回值

  • 确保在对Java进行任何和所有调用之后检查ExceptionOccurred()。不这样做会以难以调试的方式给您带来麻烦。

  • 我发现使用Eclipse和Visual Studio调试起来相对容易,如下所示:从Eclipse启动主Java程序,将Visual Studio Debugger附加到该过程。您可以在任一侧设置断点。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454489.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号