我做了一个jni的练习,编译了两个dll,一个是供java调用符合java命名规范的useDll.dll,它会调用Dll1.dll,并接收Dll1.dll传来的字符串,将此字符串变为jstring后,返回给java类。但是当dll之间调用的时候出现了问题,
无法接收另一个dll的参数,代码如下:(小弟不懂c,只是永别人的代码稍加修改)
其中一个Dll1.dll会返回个字符串:
#include <stdio.h> 
#include <windows.h> 
char* retchar()
{
char * Buf_Return;
Buf_Return  =  (char*)malloc(1024); 
Buf_Return="接收中文chinese!";
return Buf_Return;
}
另一个另一个调用这个dll:
#include <stdio.h> 
#include <windows.h> 
#include "stdlib.h"
#include "string.h"
#include "testDll.h"char* jstringToWindows( JNIEnv *env, jstring jstr );
jstring WindowsTojstring( JNIEnv* env, char* str );JNIEXPORT jstring JNICALL Java_testDll_sayHello
  (JNIEnv * env, jobject obj,  jstring s)
{  
   HINSTANCE hinstLib; 
   const char * str;
   char * Buf_Return;
   char * ProcAdd;
   hinstLib = LoadLibrary("Dll1"); 
   ProcAdd = (char*)GetProcAddress(hinstLib, "retchar");//(1)
   //ProcAdd ="接收到字符串";//(2)
   Buf_Return  =  (char*)malloc(1024); 
   str= env->GetStringUTFChars(s, 0);
   printf("%s",str);
   env->ReleaseStringUTFChars(s, str);
   const char * recvtest = jstringToWindows( env, s );
   sprintf(Buf_Return,ProcAdd);
   s = WindowsTojstring(env ,Buf_Return);
   return s;
}......
当用(2)时java可以显示="接收到字符串"
用(1)时就不行,报错说“debug assertion failed!program c:\porgram files\java\jdk1.5.0_04\bin\javaw.exe File :sprintf.c Line 94 Expression:format!=null for information on how your program can cause an assertion failure ,see the visual c++ documentation on asserts“
希望各位指教!