关于JNI,保证给分,多谢,急用 还是不要自己写.h和函数声明,用javah生成省时省力。比如你的类是:pkg.ClassName,ClassName.class放在d:\work\pkg\下那么你在d:\work\下执行javah pkg.ClassName就成了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.csdn.net/cnshare/soft/12/12913.shtm有使用jni的详细实例说明. 你说的那个实例我看了,可还是解决不了问题,因为我不知道jobjectArray 怎么用,我怎么从java中得到jobjectArray ,然后转成c能用的格式,多谢。我现在做的事情是,为java调用一个c的dll写个接口。 可以利用GetObjectArrayElement方法得到jobjectArray 的某个元素。SetObjectArrayElement设置指定位置的元素,得到某一个元素JOBJECT后就可调用他的方法,访问属性了呀 JNIEXPORT jshort JNICALL fun (JNIEnv *env, jobject,jobjectArray MediaStatus)我现在想把形参中的array首地址给一个指针,然后我用一个方法向这个地址里写进内容,最后把内容返回到java程序里。像jbytearray就用GetByteArrayElements 和ReleaseByteArrayElements两个函数就可以实现了,而jobjectarray呢?怎么来做?多谢指教,工作上遇到这样问题,几天未有进展,忧心如焚,多谢多谢 我写了个HelloWorld.java文件,public class HelloWorld { public HelloWorld() { } public native void displayHelloWorld(); static { System.loadLibrary("hello"); } public static void main(String[] args) { new HelloWorld().displayHelloWorld(); }}生成.class,然后用javah指令生成了HelloWorld.h文件,#include <jni.h>#ifndef _Included_HelloWorld#define _Included_HelloWorld#ifdef __cplusplusextern "C" {#endifJNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif实现了HelloWorldImp.c:#include <jni.h>#include "HelloWorld.h"#include <stdio.h>JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) { printf("Hello world!\n"); return;}然后生成hello.dll:cl -Ic:\java\include -Ic:\java\include\win32 -LD HelloWorldImp.c -Fehello.dll.class,.h,.c,.dll在同目录下,然后在环境变量中设置path为该目录,在classpath中设置该目录和.dll文件名,运行.class, 总是抛出java.lang.UnsatisfiedLinkError, 好象System.loadLibrary("hello")找不到hello.dll,不知道错在什么地方?这个例子是http://java.sun.com中的. 我的文件在包jnitst中,我用javah生成.h时在.class文件同目录下用javah HelloWorld和javah -jni HelloWorld总是提示Error:class HelloWorld could not be found. 要用javah -jni -classpath D;\...\jnitst\ HelloWorld,才能生成头文件. 这是为什么? 是不是生成头文件有问题才造成运行时抛出UnsatisfiedLinkError? 我的文件目录如下,在包jnitst中:projectname\src\jnitst\HelloWrold.javaprojectname\classes\jnitst\HelloWrold.classprojectname\classes\jnitst\HelloWrold.hprojectname\classes\jnitst\HelloWroldImp.cprojectname\classes\jnitst\HelloWrold.dll 如果你的包是jnitst那么应当set CLASSPATH=%CLASSPATH%;projectname\classes\ ye_cl(ye_cl) :你只能把调用dll的文件放在第一级目录下即把projectname\classes\jnitst\HelloWrold.class改成projectname\HelloWrold.class可以把dll放到系统目录下。这可能是jar的设计问题,因为dll被装载进来是以包的路径为参照的,所以如果你不放到第一级目录的话,它会找不到dll的内存地址。 求助!!java组合的问题,用了arraylist 昨天转正,做了道恶心的题,保龄球计分的,大家给点意见 关于对象数组的问题? 在命令行下输入 ant 结果提示 “此时不应有 and.”是怎么回事啊? 问下大牛,看代码时遇到不懂的代码怎么办呢? 请问高手如何最快获取文件的长度 如何在让文本框的背景显示图片呀? 关于jar文件的问题 请帮一帮菜鸟, 已经憋了我3天了!!! JB4移植到JB5好象有问题 请JAVA高手指点:JAVA初学者应该看什么书,和JAVA的学习路线?有高分 构造函数是否必须要和类名相同。
有使用jni的详细实例说明.
(JNIEnv *env, jobject,jobjectArray MediaStatus)
我现在想把形参中的array首地址给一个指针,然后我用一个方法
向这个地址里写进内容,最后把内容返回到java程序里。像jbytearray就用GetByteArrayElements 和ReleaseByteArrayElements
两个函数就可以实现了,而jobjectarray呢?怎么来做?多谢指教,工作上遇到这样问题,几天未有进展,忧心如焚,多谢多谢
public class HelloWorld {
public HelloWorld() {
}
public native void displayHelloWorld();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
生成.class,然后用javah指令生成了HelloWorld.h文件,
#include <jni.h>#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);#ifdef __cplusplus
}
#endif
#endif实现了HelloWorldImp.c:
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}然后生成hello.dll:
cl -Ic:\java\include -Ic:\java\include\win32
-LD HelloWorldImp.c -Fehello.dll
.class,.h,.c,.dll在同目录下,
然后在环境变量中设置path为该目录,在classpath中设置该目录和.dll文件名,
运行.class, 总是抛出java.lang.UnsatisfiedLinkError, 好象System.loadLibrary("hello")找不到hello.dll,不知道错在什么地方?
这个例子是http://java.sun.com中的.
我用javah生成.h时在.class文件同目录下用javah HelloWorld和javah -jni HelloWorld总是提示Error:class HelloWorld could not be found.
要用javah -jni -classpath D;\...\jnitst\ HelloWorld,才能生成头文件.
这是为什么? 是不是生成头文件有问题才造成运行时抛出UnsatisfiedLinkError?
projectname\src\jnitst\HelloWrold.java
projectname\classes\jnitst\HelloWrold.class
projectname\classes\jnitst\HelloWrold.h
projectname\classes\jnitst\HelloWroldImp.c
projectname\classes\jnitst\HelloWrold.dll
那么应当
set CLASSPATH=%CLASSPATH%;projectname\classes\
即把projectname\classes\jnitst\HelloWrold.class
改成projectname\HelloWrold.class
可以把dll放到系统目录下。
这可能是jar的设计问题,因为dll被装载进来是以包的路径为参照的,所以如果你不放到第一级目录的话,它会找不到dll的内存地址。