日期:2014-05-20  浏览次数:20779 次

JNI的诡异问题 求解答
用JNI写的简单例子 求加法运算的和,java给出a和b的值 调用生成c++ win32 dll 显示messagebox 内容为 a+b=c 可是比如a=1,b=2应该输出 1+2=3,可是总是输出1+0=3,但是如果再格式化函数 swprintf_s中 把前两个都换成a或b即 swprintf_s(msg,100,L"%d + %d = %d",ca,ca,cr);或者swprintf_s(msg,100,L"%d + %d = %d",cb,cb,cr);则能输出1+1=3或者2+2=3 求解答
代码如下
JNITest.cpp
// JNITest.cpp : 定义 DLL 应用程序的导出函数。
//

#include "stdafx.h"

JNIEXPORT void JNICALL Java_edu_hebut_JNITest_JNI_testPrint (JNIEnv * env, jclass obj, jstring msg)
{
const jchar* strMsg= env->GetStringChars(msg,0);
MessageBox(0,(LPCWSTR)strMsg,L"调用VC++的MessageBox!",0);
env->ReleaseStringChars(msg,strMsg);
}
JNIEXPORT jint JNICALL Java_edu_hebut_JNITest_JNI_testAdd (JNIEnv *env, jclass obj, jint a, jint b)
{
long ca=a,cb=b,cr=a+b;
WCHAR msg[100];
wmemset(msg,0,sizeof(WCHAR)*100);
swprintf_s(msg,100,L"%d + %d = %d",ca,cb,cr);
MessageBox(0,msg,L"加法运算",0);
return a+b;
}


java部分调用代码
JNI.java
package edu.hebut.JNITest;

public class JNI {
public static native void testPrint(String msg);
public static native int testAdd(int a,int b);

}

JNITest.java
/**
 * 
 */
package edu.hebut.JNITest;
import edu.hebut.JNITest.JNI;

/**
 * @author 
 * 
 */
public class JNITest {
static {
System.loadLibrary("JNITest");
}

/**
 * @param args
 */
public static void main(String[] args) {
//System.out.println(System.getProperty("java.library.path"));
//JNI.testPrint("hello,JNI!");
System.out.println(JNI.testAdd(1, 2));
}

}

------最佳解决方案--------------------
http://blog.sina.com.cn/s/blog_5ff37dae0100me4x.html
------其他解决方案--------------------
怎么还没有人回复呢