我试图将结构作为指针从JNI传递给Java,以便能够稍后将它从Java传回给JNI。我已阅读此主题:Passing pointers between C and Java through JNI,但我没有成功。将指针从JNI传递到Java使用long
我有一个相当复杂的结构:struct myStruct_s myStruct;
从Java,我称之为JNI函数初始化结构和长(指针结构)返回:
JNIEXPORT jlong JNICALL Java_example_ExampleJNI_getStruct(JNIEnv *jenv, jclass jcls) {
struct myStruct_s mystruct;
long *lp = (long*)&myStruct;
return lp;
}
然后我打电话一个具有那么长参数的Java方法。在JNI中,我希望能够使用之前创建的strcuture。我这样做:
JNIEEXPORT jint JNICALL Java_example_ExampleJNI_methode1(JNIEnv *jenv, jclass jcls, jlong jarg) {
struct myStruct_s *arg = (struct myStruct_s *)&jarg;
...
}
好吧,它不起作用。我猜想我长期投入结构是错误的。我应该怎么做? 谢谢。
编辑:谢谢你的提示,这里的工作职能
JNIEXPORT jint JNICALL Java_example_ExampleJNI_methode1(JNIEnv *jenv, jclass jcls, jlong jarg) {
struct myStruct_s *arg;
arg = (struct myStruct_s *)jarg;
...
}
JNIEXPORT jlong JNICALL Java_example_ExampleJNI_getStruct(JNIEnv *jenv, jclass jcls) {
struct myStruct_s *myStruct;
myStruct = (struct myStruct_s *)malloc(sizeof(struct myStruct_s));
long lp = (long)myStruct;
return lp;
}
请注意,根据目标平台,“jlong”不一定等于“long”。如果你在一个实际上是“长久”的平台上运行它,这将会失败,所以你应该总是明确地使用“jlong”。 – NeoNacho 2013-04-25 13:50:51
leochab,但你将如何访问在Java层的strct对象。如何访问struct中定义的局部变量。也有可能做一些C++类对象。我跟随类似[这里](http://stackoverflow.com/q/32840427/2624806)。 – CoDe 2015-09-29 09:46:08