我试图了解提供给我的文件是否是我可以使用Jave Native Interface的文件,在那里我可以编写一个Java类并创建与.h
头文件中的C函数对应的native
抽象方法。
所以,我现在有一个.ec
文件和.h
文件。这两个文件都是提供给我的。我被要求尝试使用JNI从.ec
文件调用函数。
然而,我注意到一些常见的JNI关键字,如JNIEXPORT
、JNICALL
、JNIEnv*
、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
文件调用这些方法?
我很感激你的任何评论或解释。
- 谢谢-谢谢
1条答案
按热度按时间9bfwbjaz1#
答案是NO,它不是一个有效的头文件。你不需要查看java本地代码并尝试手动创建头文件,而是使用-h选项让javac为你生成头文件
-h directory指定放置生成的本机头文件的位置。
指定此选项时,将为包含本机方法或具有一个或多个使用java.lang.annotation.Native注解进行注解的常量的每个类生成本机头文件。如果类是包的一部分,则编译器会将本机头文件放在反映模块名称的子目录中(如果适用)和程序包名称。如果该目录及任何必需的子目录尚不存在,则将创建它们。
Javac将编译包含原生方法的类文件,并为您输出头文件。文档here