还是不要自己写.h和函数声明,用javah生成省时省力。
比如你的类是:pkg.ClassName,ClassName.class放在d:\work\pkg\下
那么你在d:\work\下执行javah pkg.ClassName
就成了

解决方案 »

  1.   

    http://www.csdn.net/cnshare/soft/12/12913.shtm
    有使用jni的详细实例说明.
      

  2.   

    你说的那个实例我看了,可还是解决不了问题,因为我不知道jobjectArray 怎么用,我怎么从java中得到jobjectArray ,然后转成c能用的格式,多谢。我现在做的事情是,为java调用一个c的dll写个接口。
      

  3.   

    可以利用GetObjectArrayElement方法得到jobjectArray 的某个元素。SetObjectArrayElement设置指定位置的元素,得到某一个元素JOBJECT后就可调用他的方法,访问属性了呀
      

  4.   

    JNIEXPORT jshort JNICALL fun
      (JNIEnv *env, jobject,jobjectArray MediaStatus)
    我现在想把形参中的array首地址给一个指针,然后我用一个方法
    向这个地址里写进内容,最后把内容返回到java程序里。像jbytearray就用GetByteArrayElements 和ReleaseByteArrayElements
    两个函数就可以实现了,而jobjectarray呢?怎么来做?多谢指教,工作上遇到这样问题,几天未有进展,忧心如焚,多谢多谢
      

  5.   

    我写了个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 __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中的.
      

  6.   

    我的文件在包jnitst中,
    我用javah生成.h时在.class文件同目录下用javah HelloWorld和javah -jni HelloWorld总是提示Error:class HelloWorld could not be found. 
    要用javah -jni -classpath D;\...\jnitst\ HelloWorld,才能生成头文件. 
    这是为什么? 是不是生成头文件有问题才造成运行时抛出UnsatisfiedLinkError?
      

  7.   

    我的文件目录如下,在包jnitst中:
    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
      

  8.   

    如果你的包是jnitst
    那么应当
    set CLASSPATH=%CLASSPATH%;projectname\classes\
      

  9.   

    ye_cl(ye_cl) :你只能把调用dll的文件放在第一级目录下
    即把projectname\classes\jnitst\HelloWrold.class
    改成projectname\HelloWrold.class
    可以把dll放到系统目录下。
    这可能是jar的设计问题,因为dll被装载进来是以包的路径为参照的,所以如果你不放到第一级目录的话,它会找不到dll的内存地址。