我在java里面的代码如下:
public class testjava
{
  static
  {
    System.loadLibrary("testdll");
   }
   public native static int CheckPass(String FUserID,String FPassWord);   
   public static void main(String[] args)
   {
    testdll t = new testdll();
    System.out.println(t.CheckPass("admin","12345678"));
    }
  }java里面想调用VC里面的函数为CheckPassWord, CheckPassWord的函数原型是
int CheckPassWord(char * FUserID,char * FPassWord)请问我在下面的方法中,如何调用CheckPassWord这个方法。JNIEXPORT jint JNICALL Java_testdll_CheckPass (JNIEnv * env, jclass, jstring FU, jstring FP)
{
;
}我的目的是用java调用VC里面的方法CheckPassWord

解决方案 »

  1.   

    JNIEXPORT jint JNICALL Java_testdll_CheckPass (JNIEnv * env, jclass, jstring FU, jstring FP)
    {
       const char* cFU = (*env)->GetStringUTFChars(env, FU, 0);
       const char* cFP = (*env)->GetStringUTFChars(env, FP, 0);
       CheckPassWord( * cFU,char * cFP)
    }
      

  2.   

    JNIEXPORT jint JNICALL Java_testdll_CheckPass (JNIEnv * env, jclass, jstring FU, jstring FP)
    {
       const char* cFU = (*env)->GetStringUTFChars(env, FU, 0);
       const char* cFP = (*env)->GetStringUTFChars(env, FP, 0);
       CheckPassWord( * cFU,char * cFP);
    }
      

  3.   

    这样不行的呀。因为CheckPassWord的参数是 char * 类型,不能转换成 const char *
      

  4.   

    却掉三const三
    或者再声明两个指针变量
      

  5.   

    兄弟呀。还是不行啊。
    const char* cFU = (*env)->GetStringUTFChars(env, FU, 0);
       const char* cFP = (*env)->GetStringUTFChars(env, FP, 0);
       CheckPassWord( * cFU,char * cFP);
    是编译不通过的,去掉 const也是编译不通过呀。
      

  6.   

    你文件头加上javah生成的头文件了吗?
      

  7.   

    类型不匹配阿?那你看看是不是那个c++函数的参数传的不对?
    你那个CheckPassword函数都是什么样的阿?贴出来
      

  8.   

    函数原型是:
    int CheckPassWord(char * FUserID,char * FPassWord)
      

  9.   

    你的java代码写的有问题,之前没仔细看
    /*
     *Testjava.java文件
    */
    public class Testjava
    {
      static
      {
        System.loadLibrary("testdll");
       }
       public native static int CheckPass(String FUserID,String FPassWord);   
       public static void main(String[] args)
       {
        Testjava t = new Testjava();
        System.out.println(t.CheckPass("admin","12345678"));
        }
      }
      

  10.   

    /*头文件Testjava.h
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class Testjava */#ifndef _Included_Testjava
    #define _Included_Testjava
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     Testjava
     * Method:    CheckPass
     * Signature: (Ljava/lang/String;Ljava/lang/String;)I
     */
    JNIEXPORT jint JNICALL Java_Testjava_CheckPass
      (JNIEnv *, jclass, jstring, jstring);#ifdef __cplusplus
    }
    #endif
    #endif
      

  11.   

    /*
    你先编译运行这个看看
    */
    #include <jni.h>
    #include "JNIString.h"
    #include <stdio.h>JNIEXPORT jint JNICALL Java_Testjava_CheckPass (JNIEnv *, jobject obj, jstring id, jstring pwd)
    {
    const char* cid = (*env)->GetStringUTFChars(env, id, 0);
    const char* cpwd =(*env)->GetStringUTFChars(env, pwd, 0);
    printf("%s",cid);
    printf("%s",cpwd);
    }
      

  12.   

    不好意思,可能是我没有说清楚,我编译不通过是在VC里面编译不能通过。java文件还是可以正常编译的。
    hdhmail2000(禅剑飞雪) 老兄,我按你说的改,在VC里面还是编译不通过。
      

  13.   

    不好意思,以上那个c程序写错了个参数正确的如下:
    #include <jni.h>
    #include "Testjava.h"
    #include <stdio.h>JNIEXPORT jint JNICALL Java_Testjava_CheckPass (JNIEnv *env, jclass obj, jstring id, jstring pwd)
    {
    const char* cid = (*env)->GetStringUTFChars(env, id, 0);
    const char* cpwd =(*env)->GetStringUTFChars(env, pwd, 0);
    printf("%s",cid);
    printf("%s",cpwd);
    return 0;
    }
    这个我用gcc下编译成功的,关键在调用你那个c++函数了
      

  14.   

    /*
    类型强制转换,好了就给分哈,嘿嘿
    */
    #include <jni.h>
    #include "Testjava.h"
    #include <stdio.h>void ok(char * a,char *b)
    {
    printf("%s",a);
    printf("%s",b);
    }
    JNIEXPORT jint JNICALL Java_Testjava_CheckPass (JNIEnv *env, jclass obj, jstring id, jstring pwd)
    {
    const char* cid = (*env)->GetStringUTFChars(env, id, 0);
    const char* cpwd =(*env)->GetStringUTFChars(env, pwd, 0);
    printf("%s",cid);
    printf("%s",cpwd);
    ok((char* )cid,(char*)cpwd);
    return 0;
    }
      

  15.   

    谢谢!hdhmail2000(禅剑飞雪),问题解决了。