从c/c+;定义/实例化java对象+;

从c/c+;定义/实例化java对象+;,java,c++,c,dll,parameter-passing,Java,C++,C,Dll,Parameter Passing,我使用java编写了如下代码: class MyClass { public void MyFunc(ISomeListener listener); } 我想从C++程序中调用这个方法,并把它传递给所需的参数。请注意,该参数是接口的实现。因此,我需要定义C++中的和创建java对象并将其传递给方法。我该怎么做 p.S. 如果有帮助的话,最初的问题是java程序是硬件(如驱动程序)的接口。我正在尝试从这个java代码创建一个DLL,以便它可以在任何语言中使用。所以我想我应该用C/C++包装代码

我使用java编写了如下代码:

class MyClass
{
public void MyFunc(ISomeListener listener);
}
我想从C++程序中调用这个方法,并把它传递给所需的参数。请注意,该参数是接口的实现。因此,我需要定义C++中的<强>和<强>创建java对象并将其传递给方法。我该怎么做

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

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

public class MyImpl implements MyInterface
{
  @override
  public native int callback(int i);
}
使用javac编译了这个。然后使用javah生成要与JNI一起使用的函数声明。在C程序中,我定义了函数,加载了Impl类,并使用注册了回调

p.S.如何实际使用JNI定义类的问题仍然没有答案

编辑:

使用这种方法有一个缺点。我必须在类范围而不是对象范围内注册回调。

在我看来,这种方法从根本上是有缺陷的。除非通过jni使用一些本机库,否则Java不能与硬件进行任何低级接口。实现这一点的真正和通常的方法是用java包装本机对应物,而不是相反的方式。您将以360º返回起点。我不知道确切的问题,但似乎有点奇怪。。我是否正确理解了你想要在C++中实现java接口,然后调用java函数并把C++实现传递给它?我想知道这是否可能。特别是考虑到C++甚至没有接口。但是,应用程序已经实现,重新执行它将不太划算。@ Philipp,我已经使用JNI并成功运行了C.的java代码,您理解得很正确,这就是为什么我要问的问题是,是否可以(如何?)。在C++代码中直接使用可能会更容易。Java代码正在使用的本机库。如果要在运行时定义类,则可以使用。通过JNI调用它很简单;它只需要一点代码。最好先定义所有需要的类,然后加载它们的jar,而不是动态构建它们。