这是在网上下的代码,简单的用jni去调dll,可是很多地方有疑问,请大侠们帮我看看
编写 Java 代码:
public class TestJNI { 
  public native void greetings();   static { 
      System.loadLibrary("greet"); 
  }   public static void main(String args[]) { 
      new TestJNI().greetings(); 
  } 

编译 Java 文件: 
jvc TestJNI.java 
生成类文件上运行 JavaH: 
javah -jni TestJNI 
编写 C/C++ 代码根据生成的头文件: 
#include "TestJNI.h" 
#include <stdio.h> JNIEXPORT void JNICALL Java_TestJNI_greetings(JNIEnv *env,jobject jobj) { 
  printf("Hello from Visual C++!");                              //每次都要用c++来重新实现一次dll里的函数么 

编译 C/C++ 代码: 
cl greet.cpp -Ic:\sdk-java.31\include -Fegreet.dll -MD -LD  //编译出来的是个什么东西,是dll么,是的话为什么又写了一个dll? 
测试应用程序: 
jview TestJNI                              //jview是什么命令? 以后怎么用TestJNI这个类啊
怎么看起来是先有的java后写的dll啊,太晕了

解决方案 »

  1.   

    这样弄完后是不是到了Linux下又不能运行了?
      

  2.   

    对于java调用dll的本地方法,java虚拟机对本地方法的处理是对自身的一种扩展。
    java虚拟机实例只会加载一次dll文件,loadlibery方法在static块中就是如此表示的,而且大部分jdk api都是本地方法,你查看了jdk源码应该会清楚。
    对于你第二个问题,我感到很无语。
    一般来说都是先写java再写dll的,这本书没什么特别的。
      

  3.   

    三星移动创新者园地全新改版,真正为手机软件开发者提供帮助,谋福利。
    提供资源:
    1、 常用源代码样例库。
    2、 三星用户达八千九百万,市场份额占据第二位,存在巨大的商机。
    3、 三星专用SDK、API、新功能指导建议,集中的机型适配所需资源。
    4、 工程师答疑,帮助解决开发中的疑难杂症。
    5、 免费远程真机测试—远程互联网预约挂在网上的真机,上传软件测试,机型丰富。
    6、 三星在线商店,机器预装,帮你推销软件。让你轻松赢得第一桶金。

      

  4.   

    LZ还没明白吗?这个dll是你要写的符合jni规范的dll,
    你要调用的其他dll可以通过在这个dll去调用
    一般来说应该是先有dll而后调用的,
    但其他程序编写的dll和java能直接调用的接口和参数类型不一定匹配
    所以就在java里重新写一个dll去调用其他的dll
    当然,如果你的dll的接口本身就符合jni规范,那你直接就可以调用了,不需要生成这个dll
      

  5.   

    编写 C/C++ 代码根据生成的头文件: 
    #include "TestJNI.h" 
    #include <stdio.h> JNIEXPORT void JNICALL Java_TestJNI_greetings(JNIEnv *env,jobject jobj) { 
      printf("Hello from Visual C++!");                              //每次都要用c++来重新实现一次dll里的函数么 

    //每次都要实现编译 C/C++ 代码: 
    cl greet.cpp -Ic:\sdk-java.31\include -Fegreet.dll -MD -LD  //编译出来的是个什么东西,是dll么,是的话为什么又写了一个dll? 
    //编译出来的dll就是给java用的那个测试应用程序: 
    jview TestJNI                              //jview是什么命令? 以后怎么用TestJNI这个类啊 
    怎么看起来是先有的java后写的dll啊,太晕了//jview?应该是java TestJNI命令吧
    //TestJNI的用法就是忽略native关键字,跟正常java类一样
    //先有java,再写dll,就像先有接口再有实现是一个道理,而且C的实现方法名字需要遵循JNI规范,先写java在javah比较方便