【问题标题】:Is this a valid .h C header file that can be used for Java Native Interface JNI?这是可用于 Java Native Interface JNI 的有效 .h C 头文件吗?
【发布时间】:2022-11-12 01:59:42
【问题描述】:

我试图了解提供给我的文件是否可以使用 Jave Native Interface 来编写 Java 类并创建与 .h 头文件中的 C 函数相对应的 native 抽象方法。

所以,我现在拥有的是.ec 文件和.h 文件。两者都提供给了我。 我被要求尝试使用 JNI 从.ec 文件中调用函数。

但是,我注意到一些常见的 JNI 关键字,如 JNIEXPORTJNICALLJNIEnv*jobject,在提供给我的 .ec.h 文件中均不存在。

.h 文件如下所示:

#ifndef _BITMAP_H
#define _BITMAP_H 1

struct BITMAP
{
    char *buffer;   // buffer 
    int   ax;       // width
    int   ay;       // height
    int   size;     // buffer size
};
struct BITMAP *create(int ax, int ay);
void close( struct BITMAP *pbmp );
void drawLn( struct BITMAP *pbmp, int x1, int y1, int x2, int y2 );
void drawTxt(struct BITMAP *pbmp, char *szText, int x, int y );
void setPxl( struct BITMAP *pbmp, int x, int y );
#endif

这是使用 JNI 的有效文件吗? 我是 JNI 的初学者,但我怀疑 JNI 似乎不适用于这种文件定义。

是否有其他 Java 技术或库可以从 .ec 文件中调用这些方法?

我将不胜感激任何评论或解释。

谢谢你。

【问题讨论】:

    标签: java c++ c java-native-interface jnienv


    【解决方案1】:

    答案是否定的,它不是一个有效的头文件。您不查看 java 本机代码并尝试手动创建头文件,而是让 javac 使用 -h 选项为您生成头文件

    -h directory 指定放置生成的本机头文件的位置。

    当您指定此选项时,将为 每个包含本机方法或具有一个或多个的类 用 java.lang.annotation.Native 注解注解的常量。 如果该类是包的一部分,则编译器会将本机 反映模块名称的子目录中的头文件(如果 适当的)和包名称。目录和任何必要的 子目录,如果它们不存在,将被创建。

    Javac 将编译包含本机方法的类文件并为您输出头文件。文档here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多