首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

JNI的诡异有关问题 求解答

2012-12-14 
JNI的诡异问题 求解答用JNI写的简单例子 求加法运算的和,java给出a和b的值 调用生成c++ win32 dll 显示mes

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
[其他解释]
怎么还没有人回复呢

热点排行