我看了网上看到比较流行的例子如下并照着做,
首先javac testdll.java
然后javah testdll
然后就在这个目录建立一个dll工程,添加如下的testdll.cpp文件
可是在编译这个C文件的时候出现了错误,说无法找到JNI.H
请问这是为什么啊?
public class testdll 

static 
{ System.loadLibrary("goodluck"); } public native static int get(); public native static void set(int i); public static void main(String[] args) { testdll test = new testdll(); test.set(10); System.out.println(test.get()); } } 用javac testdll.java编译它,会生成testdll.class。 再用javah testdll,则会在当前目录下生成testdll.h文件,这个文件需要被C/C++程序调用来生成所需的库文件。 其中C文件如下:
#include "testdll.h" int i = 0; JNIEXPORT jint JNICALL Java_testdll_get (JNIEnv *, jclass) { return i; } JNIEXPORT void JNICALL Java_testdll_set (JNIEnv *, jclass, jint j) { i = j; } 

解决方案 »

  1.   

    还要这段话是什么意思呢?编译连接成库文件,本例是在WINDOWS下做的,生成的是DLL文件。并且名称要与JAVA中需要调用的一致,这里就是goodluck.dll 
    把goodluck.dll拷贝到testdll.class的目录下,java testdll运行它,就可以观察到结果了。这里的goodluck.dll文件在哪里呢谢谢
      

  2.   

    你要把 %JAVA_HOME%\include和%JAVA_HOME%\include\win32加到你项目的include目录中
      

  3.   

    是加到C文件的前面么?还是加到JAVA文件的前面呢?谢谢
      

  4.   

    http://community.csdn.net/Expert/topic/4928/4928911.xml?temp=.9918787
      

  5.   

    cl -I%java_home%\include -I%java_home%\include\win32 fun_NativeMethodTestImpl.c -LD -FeNativeMethodTest.dll
    这里是在命令行进行么?
    呵呵
      

  6.   

    命令行可以这样运行么?是不是要设置环境变量?
    我现在这里不能编译调试. 
    请问能说详细点么Hhee
      

  7.   

    jni嘛,
    建意看thinking in java中的jni部分,
    我的第一个例子就是用它通过的.
      

  8.   

    注意要把jdk1.4\include下的jni.h和jvmdi.h,jvmpi.h..放到vc的目录下面.
      

  9.   

    晕死,这个不是jni问题,这个纯属vc工程配置一下就解决的问题!另外深成的dll可以放到 jre\bin目录下就可以了
      

  10.   

    呵呵,已经搞定了,其实就是要把头文件放到vc编译的这个目录下面来,然后生成动态库文件后,把该动态库文件拷贝到和JAVA文件的相同目录下,再执行JAVA就可以了^_^
      

  11.   

    搞定就要结帖,还有手动copy不是好办法,PostBuild 里加个copy命令到指定目录,
    jni.h最好不要copy,在project settings里jni.h的目录加到工程中要好一些。
      

  12.   

    楼主一开始拿个编译好的DLL来不就没这事了?
    毕竟路路通是不容易办到的