【问题标题】:include .h file into java file in android using jni as source folder of .h file?使用jni作为.h文件的源文件夹将.h文件包含到android中的java文件中?
【发布时间】:2014-02-26 20:13:20
【问题描述】:
  void ProcedureParams_Initialize(ProcedureParams* pVal);
    flag ProcedureParams_IsConstraintValid(const ProcedureParams* val, int* pErrCode);
    flag ProcedureParams_XER_Encode(const ProcedureParams* val, ByteStream* pByteStrm, int* pErrCode, flag bCheckConstraints);
    flag ProcedureParams_XER_Decode(ProcedureParams* pVal, ByteStream* pByteStrm, int* pErrCode);
    flag ProcedureParams_BER_Encode(const ProcedureParams* val, ByteStream* pByteStrm, int* pErrCode, flag bCheckConstraints);
    flag ProcedureParams_BER_Decode(ProcedureParams* pVal, ByteStream* pByteStrm, int* pErrCode);

typedef struct {
    GeneralEvthParams g_params;
    DataParams d_params;
} EvtHandlerParams;

如何将 .h 文件直接添加到我的 .java 文件中。我在我的 jni 文件夹中使用 NDk 和 .h 文件。我想使用头文件的功能。我如何在 java 活动中直接使用函数?请帮帮我

【问题讨论】:

  • 如何将 .h 文件直接添加到我的 .java 文件中。我在我的 jni 文件夹中使用 NDk 和 .h 文件。我想使用头文件的功能。我如何在 java 活动中直接使用函数?请帮帮我

标签: android java-native-interface


【解决方案1】:

您不能直接调用 C/C++ 函数。 Java 原生函数的 C 实现都有一组非常具体的参数:

  JNIEXPORT jint JNICALL Java_com_mycompany_MyClassName_myfunc
    (JNIEnv * env, jobject obj, jint code) {
     ...
  }

所以你必须创建包装函数。

一种合理的方法是定义一个包含所有本机函数的 Java 版本的类(作为静态或实例方法),并通过该类调用它们。

要从 Java 生成 C 头文件(嗯,不是源文件,而是 .class 文件),您可以这样做:

cd bin/classes
javah com.mycompany.MyClassName com.mycompany.AnotherClassName

【讨论】:

  • 我的 jni 文件夹中已经有头文件,但我必须只使用该头文件中的函数吗?是否可以直接调用该方法?
  • Yaa 还有一件事可以在 .java 类中使用结构指针?如果可能的话,我想使用哪些方法,因为在 c 源头文件中我有指针方法的结构。
  • Java 不能直接调用 C/C++ 函数,唯一的方法是定义原生函数并从中调用 C/C++ 函数。无论如何,普通的 C/C++ 函数不能对 Java 对象或数组做任何有用的事情。
  • 那我们如何访问.h文件的结构变量呢?
  • 您可以将指向本机结构的指针保留为 Java 整数,但释放它们会有点精神分裂。 Java VM 无法直接访问底层系统的 C 结构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多