java - 通过 JNI 将多个参数从 java 传递到 c++ 应用程序

标签 java android c++ java-native-interface

在java端,当有消息接收到时,java函数

JavaMessageReceived(int msgNo, int msgLen, int[] msgData, long msgTimestamp)

会被调用,所以消息的信息会存储在msgNo、msgLen、msgData和msgTimestamp中。

然后我想将 msgNo、msgLen 和 msgData、msgTimestamp 中的值传递给 c++ 端(应用程序)中的函数,称为

CppGotMessage(int *no, int *len, int*data, long* timestamp)

当我调用CppGotMessage()时,我会得到接收到的消息的信息。

我如何通过 JNI 执行此操作?(不能使用 JNA 或其他第三方软件)
从这个链接: http://doc-snapshot.qt-project.org/qdoc/qandroidjniobject.html

我注意到 ResigterNatives 对我不起作用,因为当我在 C++ 端调用 CppGotMessage 时,我没有任何参数要传递给 java 函数。我只需要从 java 函数中获取值并将它们存储在我的 CppGotMessage 函数的参数中..

最佳答案

首先你需要声明一个原生java函数:

native JavaMessageNative(int msgNo, int msgLen, int[] msgData, long msgTimestamp);

然后需要在c++部分实现这个方法。调用 javah 将为您的 native 函数创建签名。

在此函数中,您首先需要将 java 类型转换为 native 类型。对于整数,这是微不足道的,但 int[] 您需要使用适当的 JNI 函数。搜索 GetIntArrayElements

之后您可以简单地调用您自己的 CppGotMessage 函数。

关于java - 通过 JNI 将多个参数从 java 传递到 c++ 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20637816/

相关文章:

android - 我不明白是什么原因导致无法启动 Activity java.lang.NullPointerException

android - 没有重定向的 WebView 回溯历史

java - Android map 注释上的按钮

java - 从 Library Collection 类调用主类的参数化方法

android - 如何在 Jetpack Compose 中将屏幕高度分成两半?

c++ - fread/fwrite 大小和计数

c++ - 在cpp中的同一程序中使用输出文件作为输入文件

c++ - Qt Creator/QMake 链接库

java - 如何使用 Jar 文件在 IntelliJ IDEA 中设置运行/调试配置?

java - 我的 jComboBox 不对我的 keyListener 使用react,并且 actionPerform 执行奇怪的操作