在网上找了很多,大致的方法是用JNI,我尝试了,如果参数传进去的int的,是成功的
例如我本来的a.dll是 int add(int x , int y),我用java的JNI的javah 重新产生一个头文件,然后重新建立一个VC的dll,假如是b.dll,这样我在b.dll里面调用a.dll的add方法,我的java代码是:
public class HelloWorld
{
 //申明方法 
public native  int add(int x,int y);
public native  String dologin(String x,int y); static{ 
System.loadLibrary("b"); 

public static void main(String []args)
{
    int m=10;
    HelloWorld o = new HelloWorld();
    System.out.println("hello world");
    String str;
    str=o.dologin("213123",6);
    System.out.println(str);
   //System.out.println(o.add(1,2));
}
}
刚才说了,是成功的,可是我现在要求java源代码调用需要传进去unsigned char * 并且函数也要有unsigned char*的返回值,例如我的b.dll里面
helloworld.h里面生成的 
JNIEXPORT jint JNICALL Java_HelloWorld_add
  (JNIEnv *, jobject, jint, jint);JNIEXPORT jstring JNICALL Java_HelloWorld_dologin
  (JNIEnv *, jobject, jstring, jint);b.cpp里面的实现代码JNIEXPORT jstring JNICALL Java_HelloWorld_dologin
(JNIEnv *env, jobject, jstring js, jint num)
{
char * Buf_Return;
Buf_Return = (char*)malloc(300); 
char * ctest;
ctest = (char*)malloc(300); 
ctest = jstringToWindows( env, js );

int length = num;
jstring jstr;
char s2[25]={'\0'};
sprintf(Buf_Return,"%d_%s",length,ctest);//简单的将length和传进来的字符串连接起来,然后再传出去
jstr = WindowsTojstring(env ,Buf_Return);
return js;
}
按照网上的jsing和unsigned char*方法,别人都说成功的,可是我以调用就出错Exception in thread "main" java.lang.UnsatisfiedLinkerror:HelloWorld.dologin(Ljava/lang/String;I)Ljava/lang/String
不知道有没有人能给段能使用的 java调用dll的例子,谢谢。对java不熟悉,在网上找的代码:用于jstring和char*转换的
char* jstringToWindows( JNIEnv *env, jstring jstr )
{
int length = (env)->GetStringLength(jstr );
const jchar* jcstr = (env)->GetStringChars(jstr, 0 );
char* rtn = (char*)malloc( length*2+1 );
int size = 0;
size = WideCharToMultiByte( CP_ACP, 0, (LPCWSTR)jcstr, length, rtn,(length*2+1), NULL, NULL );
if( size <= 0 )
return NULL;
(env)->ReleaseStringChars(jstr, jcstr );
rtn[size] = 0;
return rtn;
}
jstring WindowsTojstring( JNIEnv* env, char* str )
{
jstring rtn = 0;
int slen = strlen(str);
unsigned short * buffer = 0;
if( slen == 0 )
rtn = (env)->NewStringUTF(str ); 
else
{
int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, NULL, 0 );
buffer = (unsigned short *)malloc( length*2 + 1 );
if( MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, (LPWSTR)buffer, length ) >0 )
rtn = (env)->NewString( (jchar*)buffer, length );
}
if( buffer )
free( buffer );
return rtn;
}