3

我在 java 中的代码如下所示:

class MyClass
{
public void MyFunc(ISomeListener listener);
}

我想从 C++ 程序中调用这个方法并将所需的参数传递给它。请注意,参数是接口的实现。因此,我需要从 c++定义 创建java 对象并将其传递给方法。我怎样才能做到这一点?

PS 如果有帮助,最初的问题是java程序是硬件的接口(如驱动程序)。我正在尝试从这个 java 代码创建一个 DLL,以便它可以用于任何语言。所以我想我会使用 C/C++ 包装代码,然后用它制作一个 DLL。

4

1 回答 1

0

我设法通过在 java 中定义 Listener 类来解决这个问题。侦听器具有带有所需回调签名的本机方法。

public class MyImpl implements MyInterface
{
  @override
  public native int callback(int i);
}

使用 javac 编译。然后使用 javah 生成要与 JNI 一起使用的函数声明。在 C 程序中,我定义了函数并使用RegisterNatives加载了 Impl 类并将回调注册到其中。

PS如何使用 JNI 实际定义一个类的问题仍未得到解答。

编辑:
使用这种方法有一个缺点。我将不得不在类范围而不是对象范围内注册回调。

于 2013-04-13T11:44:50.243 回答