各位大侠,如何用Java调用Windows system32里的dll文件。能否给出具体代码与步骤,小弟万分感谢~~~

解决方案 »

  1.   

    class HelloWorld { 
    public native void displayHelloWorld();←左方的native型態是通知Java這個函數會使用到外部函數 
     
    static { 
    System.loadLibrary("hello"); ←左方的程式碼代表我要載入hello.dll的動態連結,hello.dll的製作我在稍後會做介紹 

     
    public static void main(String[] args) { 
    new HelloWorld().displayHelloWorld(); 

    }
      

  2.   

    #include 
    #include "HelloWorld.h" 
    #include 
     
    JNIEXPORT void JNICALL 
    Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) 

    printf("HelloWorld"); 
    return; 
    }
      

  3.   

    谢谢啦,不过这个JNI过程可以实现。 我现在需要的是直接对windows中system32文件夹里面的dll进行调用。不用自己重新生成个dll。
      

  4.   

    System.loadLibrary("pimdll"),这里扩展名.dll可省略
    java调dll只能调JNI方式生成的DLL,不能调其他DLL
      

  5.   

    强烈推荐楼主一个东西,叫JNA
    它可以直接调用动态链接库,而不用写一句本地代码
    它的地址是:https://jna.dev.java.net
    我可以举一个非常简单的例子给你:
    /**
     *
     * @author hadeslee
     */
    import com.sun.jna.Library;
    import com.sun.jna.Native;
    import java.util.logging.Logger;interface Kernel32 extends Library {    Kernel32 INSTANCE = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class);    int GetLogicalDriveStringsA(int length, byte[] buffer);    int GetSystemDirectoryA(byte[] buffer, int size);
        int GetTickCount();
        int GetSystemTime(int[] is);
    }public class Test1 {    private static Logger log = Logger.getLogger(Test1.class.getName());    public static void main(String[] args) throws Exception {
            Kernel32 lib = Kernel32.INSTANCE;
            byte[] buffer2 = new byte[100];
            lib.GetLogicalDriveStringsA(buffer2.length / 2, buffer2);
            for (byte bt : buffer2) {
                System.out.print((char) bt);
            }
            System.out.println();
            byte[] buffer = new byte[50];
            lib.GetSystemDirectoryA(buffer, 50);
            for (byte bt : buffer) {
                System.out.print((char) bt);
            }
            System.out.println();
            System.out.println(lib.GetTickCount());
            int[] is=new int[1];
            System.out.println(lib.GetSystemTime(is));
            System.err.println(is[0]);;
            
        }
    }
      

  6.   

    Runtime.getRuntime().exec() 这个我已经知道了。我是指直接调用system32文件夹里的dll文件,实现某个功能。 请问达人这样能否实现? 如果能实现的话, 具体步骤和代码是什么?多谢了  万分感谢
      

  7.   

    你只要定义一个接口,它继承自Library,然后在里面写上DLL里面有的函数,名字要相同,
    然后这个接口的实现就由JNA来搞定了,你直接用它就行了.
      

  8.   

    楼上的达人,能否具体说明一下,我是个java菜鸟,多谢多谢