这是否为可用于Java原生界面JNI的有效.h C头文件?

68bkxrlz  于 2022-12-03  发布在  Java
关注(0)|答案(1)|浏览(113)

我试图了解提供给我的文件是否是我可以使用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文件调用这些方法?
我很感激你的任何评论或解释。

  • 谢谢-谢谢
9bfwbjaz

9bfwbjaz1#

答案是NO,它不是一个有效的头文件。你不需要查看java本地代码并尝试手动创建头文件,而是使用-h选项让javac为你生成头文件
-h directory指定放置生成的本机头文件的位置。
指定此选项时,将为包含本机方法或具有一个或多个使用java.lang.annotation.Native注解进行注解的常量的每个类生成本机头文件。如果类是包的一部分,则编译器会将本机头文件放在反映模块名称的子目录中(如果适用)和程序包名称。如果该目录及任何必需的子目录尚不存在,则将创建它们。
Javac将编译包含原生方法的类文件,并为您输出头文件。文档here

相关问题