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;
}
package edu.hebut.JNITest;
public class JNI {
public static native void testPrint(String msg);
public static native int testAdd(int a,int b);
}
/**
*
*/
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));
}
}