使用 JNI 在 C++ 和 JAVA 之间进行通信时,我在哪里保存"this"?



我在c++中有一个类叫做kitten

class kitten
{
public:
 void ChangeColor(int newColor);
 int GetColor();
}

现在使用JNI,我想让我的java程序能够使用这个类。

我知道如何使用JNI给我的java程序调用C风格函数的能力,但这是一个成员函数。

我想添加一个C风格的函数叫做kitten* CreateNewKitten();,其中有一行:return new kitten();

然后以某种方式将这个本地kitten对象返回给JAVA,然后JAVA代码将调用C风格的函数:

ChangeColor(kitten* myKitten, int newColor)
{
   myKitten->changeColor(color)
}

为了说清楚,我的问题是:是否有可能将本机小猫返回到java代码?如何?这是正确的方法吗?

一般的问题是如何从c++传递指针到Java并接收它返回,在this指针中没有什么特别的。最好的文章之一是Roman Kennke的一篇老文章,但简短的答案可以在SO上找到:

你可以使用Java long来获取和设置指针,除非在你的本地架构中指针超过64位。

最新更新