您不能将原始C结构传递给Java,并希望它将这些结构视为类。您需要为您的结构创建一个类。我看到您已经做到了,所以您唯一要做的就是将这个结构转换为该类的实例。
Java方面的代码:
public static native ComplexClass listenUDP();
将转换为:
JNIEXPORT jobject JNICALL Java_com_main_MainActivity_listenUDP(JNIEnv *env, jclass);
在该C代码中,您需要使用
env->FindClass();函数加载ComplexClass
。然后,要创建该类的新实例(如果您使用零参数的构造函数,它将简化操作),您需要加载构造函数方法签名并将其“调用”在
env->NewObject()方法中。完整代码:
jclass complexClass = env->FindClass("/com/main/ComplexClass");jmethod constructor = env->GetMethodId(complexClass, "<init>", "()com/main/ComplexClass"); //The name of constructor method is "<init>"jobject instance = env->NewObject(complexClass, constructor);然后,您需要使用设置此类的字段
env->setXXXField();。如果您有更多对象作为字段并且还想创建它们,则对另一个对象重复上述过程。
这看起来很复杂,但这就是在托管Java代码中使用本机C的代价。



