同时带有一个DLL文件,一个对应的.H文件,一个.LIB文件,这都是动态库一起带有的。我现在很着急,希望哪位高手能指点一下,谢谢!

解决方案 »

  1.   

    使用JNI规范写一个dll(叫做A吧),Java的代码可以使用A实现的函数;而A是用C语言实现的,可以调用你那个原先有的DLL。具体看一下JNI的规范吧。
      

  2.   

    呵呵,在SUN的文档上看到的,帮你一把。
    Step 1: Write the Java Code
    class HelloWorld {
        public native void displayHelloWorld();    static {
            System.loadLibrary("hello");
        }
        
        public static void main(String[] args) {
            new HelloWorld().displayHelloWorld();
        }
    }
      

  3.   

    Step 2: Compile the Java Codejavac HelloWorld.java
      

  4.   

    Step 3: Create the .h FileC:\> javah -jni HelloWorld这是你得到的 .h文件,可以不看。
    不过要知道:
    JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject);
    你将要调用的函数接口,有命名规则的。/* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class HelloWorld */#ifndef _Included_HelloWorld
    #define _Included_HelloWorld
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     HelloWorld
     * Method:    displayHelloWorld
     * Signature: ()V
     */
    JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
      (JNIEnv *, jobject);#ifdef __cplusplus
    }
    #endif
    #endif
      

  5.   

    Step 4: Write the Native Method Implementation#include <jni.h>
    #include "HelloWorld.h"
    #include <stdio.h>JNIEXPORT void JNICALL 
    Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) 
    {
        printf("Hello world!\n");
        return;
    }
      

  6.   

    Step 4: Write the Native Method Implementation 
    #include <jni.h>
    #include "HelloWorld.h"
    #include <stdio.h>JNIEXPORT void JNICALL 
    Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) 
    {
        printf("Hello world!\n");
        return;
    }
      

  7.   

    Step 5: Create a Shared Library cl -Ic:\java\include -Ic:\java\include\win32
          -LD HelloWorldImp.c -Fehello.dll呵呵,兄弟,差不多了,要是.DLL文件高不定,你用VC搞一下吧
      

  8.   

    呵呵,兄弟,我大部分已经解决了,现在有一个很头疼的问题就是:在C环境下的输出正常,但是到了JAVA环境下却是乱码,我已经用了:sError = (*env)->NewStringUTF(env,sErrorReason);
    if (sError == NULL ){
    return slError
    }
    return  sError;在C环境下输出sErrorReason显示正常,转换后到JAVA下输出sError就不正常了,请高手指点!