当前位置: 技术问答>java相关
急!!!谁编过 JNI
来源: 互联网 发布时间:2014-12-29
本文导语: JNI里面的两个参数:JNIEnv * 和 jobject 到底如何使用? 究竟大括号里怎么使用 C 语言? 能不能给我举个小例子?---多谢大侠!!! 有无此方面的资料?急!!! | JNI方法可以很容易地访问...
JNI里面的两个参数:JNIEnv * 和 jobject 到底如何使用?
究竟大括号里怎么使用 C 语言?
能不能给我举个小例子?---多谢大侠!!!
有无此方面的资料?急!!!
究竟大括号里怎么使用 C 语言?
能不能给我举个小例子?---多谢大侠!!!
有无此方面的资料?急!!!
|
JNI方法可以很容易地访问甚至改变被激活对象的成员域,这是通过使用各种JNI访问方法来实现的,而这些方法则是有变成者通过作为第一个参数的传给每个JNI方法的接口指针。JNI接口指针的类型是JNIENV,第二个参数随本地方法彻底性者不同而不同,对于一个非静态本地方法而言,该参数是一个对象的引用,而对有静态方法而言则是他的JAVA类的引用。通过访问函数来访问JAVA对象成员,保证了本地方法实现了可移植性。
Sample:
public class SayHello {
public String text = "java joe";
public int age = 0;
public native void greet();
static {
System.loadLabrary("SayHello.dll");
}
public void howOld() {
System.out.println(test + "is + age + "years old today");
}
public static void main(String[] args) {
SayHello s = new SayHello();
s.greet();
s.howOld();
}
}
#include "SayHello.h"
JNIEXPORT void JNICALL Java_SayHello_greet(JNIEnv * env,jobject this)
{
jfieldID jf;
jclass jc;
jobject jobj;
jint new_age = 2;
jc = (*env)->GetObjectClass(env,this);
jf = (*env)->GetFieldID(env,jc,"text","Ljava/lang/Sring");
jobj = (*env)->GetObjectField(env,this,jf);
pal = (*env)->GetStringUTFChars(env,jobj,0);
printf("Hi%s!Welcome to the netherworld of native methods!n",pal);
jf = (*env)->GetFieldID(env,jc,"age","1");
(*env)->SetIntField(env,this,jf,new_age);
}
上面都是从书上抄来的,如果有帮助那就是最好了!
Sample:
public class SayHello {
public String text = "java joe";
public int age = 0;
public native void greet();
static {
System.loadLabrary("SayHello.dll");
}
public void howOld() {
System.out.println(test + "is + age + "years old today");
}
public static void main(String[] args) {
SayHello s = new SayHello();
s.greet();
s.howOld();
}
}
#include "SayHello.h"
JNIEXPORT void JNICALL Java_SayHello_greet(JNIEnv * env,jobject this)
{
jfieldID jf;
jclass jc;
jobject jobj;
jint new_age = 2;
jc = (*env)->GetObjectClass(env,this);
jf = (*env)->GetFieldID(env,jc,"text","Ljava/lang/Sring");
jobj = (*env)->GetObjectField(env,this,jf);
pal = (*env)->GetStringUTFChars(env,jobj,0);
printf("Hi%s!Welcome to the netherworld of native methods!n",pal);
jf = (*env)->GetFieldID(env,jc,"age","1");
(*env)->SetIntField(env,this,jf,new_age);
}
上面都是从书上抄来的,如果有帮助那就是最好了!
|
也可以做个wrapper, 做一个和java交互的dll, 并且,该dll负责同已有dll通信 :)
|
http://java.sun.com/docs/books/tutorial/native1.1/stepbystep/index.html
|
为什么不看看the java tutorial呢?
http://java.sun.com/docs/books/tutorial/
里面有关于jni的整整一章,有助理解!
http://java.sun.com/docs/books/tutorial/
里面有关于jni的整整一章,有助理解!
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。