站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题java调用VC写的DLL,如何传递参数

java调用VC写的DLL,如何传递参数

摘要: java调用VC写的DLL,如何传递参数


我在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



帮顶,关注


没用过,学习、关注!


.....呵呵 也来帮顶一下


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)
}



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);
}


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


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


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


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


已经加上去了啊,现在出错提示类型不匹配


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


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


你的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"));
}
}


/*头文件Testjava.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* 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


/*
你先编译运行这个看看
*/
#include
#include "JNIString.h"
#include

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);
}



学习、关注!


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


不好意思,以上那个c程序写错了个参数正确的如下:
#include
#include "Testjava.h"
#include

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++函数了





晚上找个c++高手替你解决,好久没接触c++了


/*
类型强制转换,好了就给分哈,嘿嘿
*/
#include
#include "Testjava.h"
#include

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;
}


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


↑返回目录
前一篇: java连接数据库的问题 能帮通俗易懂解答的牛人给50分
后一篇: 如何清空一个文件中所有的内容,如何修改相对路径?