当使用 JNI 在 C++ 和 JAVA 之间通信时,我在哪里保存我的 "this"?
Where do I save my "this" when communicating between C++ and JAVA using JNI?
我在 c++ 中有一个 class 叫做 kitten
class kitten
{
public:
void ChangeColor(int newColor);
int GetColor();
}
现在使用 JNI,我想让我的 java 程序能够使用这个 class。
我知道如何使用 JNI 让我的 java 程序能够调用 C 风格的函数,但这是一个成员函数。
我考虑过添加一个名为
kitten* CreateNewKitten();
,将有一行:return new kitten();
然后以某种方式 return 这个本机 kitten
对象到 JAVA 然后 JAVA 代码将调用 C 样式函数:
ChangeColor(kitten* myKitten, int newColor)
{
myKitten->changeColor(color)
}
为了清楚起见,我的问题是:
是否可以 return 我的本地小猫 java 代码?如何 ?这是正确的方法吗?
一般问题是如何将指针从 C++ 传递到 Java 并接收回来,this
指针没有什么特别之处。最好的文章之一是 old post by Roman Kennke, but the short answer 可以在 SO:
上找到
you can use Java long to get and set pointers, unless in your natie architecture pointers are more than 64 bit.
我在 c++ 中有一个 class 叫做 kitten
class kitten
{
public:
void ChangeColor(int newColor);
int GetColor();
}
现在使用 JNI,我想让我的 java 程序能够使用这个 class。
我知道如何使用 JNI 让我的 java 程序能够调用 C 风格的函数,但这是一个成员函数。
我考虑过添加一个名为
kitten* CreateNewKitten();
,将有一行:return new kitten();
然后以某种方式 return 这个本机 kitten
对象到 JAVA 然后 JAVA 代码将调用 C 样式函数:
ChangeColor(kitten* myKitten, int newColor)
{
myKitten->changeColor(color)
}
为了清楚起见,我的问题是: 是否可以 return 我的本地小猫 java 代码?如何 ?这是正确的方法吗?
一般问题是如何将指针从 C++ 传递到 Java 并接收回来,this
指针没有什么特别之处。最好的文章之一是 old post by Roman Kennke, but the short answer 可以在 SO:
you can use Java long to get and set pointers, unless in your natie architecture pointers are more than 64 bit.