http://www.excelsior-usa.com/home.html
解决方案 »
- JAVA操作ACCESS数据库进行压缩并修复Access数据库
- 一个简单面向对象编程的小问题?
- 高分求一个产生不重复编号(String)的方法必须不重复 在线等!!!急求!!
- 看似简单,又有点捉摸不透的split方法,如果你还是在用1.4之前的方法就别进来了
- 如 何 使 一 个 SWING 组 件 透 明。
- 新问题,关于java的运行速度问题
- 30分求JAVADOC中文补丁
- 轻松解答,高分相送!
- 帮忙看看数据库的程序,运行不出来
- 菜鸟求救:请问如何知道AWT 中CheckBox组件已被选中?
- 请问除了用网页打开的方式,还有没有其他让Applet程序运行的方法?
- 怎样才能判断一个applet被reload过?
To Java from C (as seen from the previous How-to) : #include "JavaHowTo.h" JNIEXPORT jstring JNICALL Java_JavaHowTo_sayHello
(JNIEnv *env, jobject obj) {
return env->NewStringUTF("Hello world");
}
From Java to C : Suppose we have a Java Class public class MyClass {
public String sayHello(){
return "Hello world From Java";
}
}
then from C, we want to call the Java sayHello() method which returns a String : JNIEXPORT void JNICALL Java_JavaHowTo_sayHello
(JNIEnv *env, jobject obj) {
const char *str;
jclass myclass_class =(jclass) env->NewGlobalRef
(env->FindClass ("MyClass"));
// we need the MyClass constructor
jmethodID constructorID = env->GetMethodID
(myclass_class, "", "()V");
// and the sayHello() method
jmethodID methodID = env->GetMethodID
(myclass_class, "sayHello", "()Ljava/lang/String;"); // instanciate a MyClass object
jobject myclass_object = env->NewObject
(myclass_class, constructorID);
// call the sayHello() method
jstring s = (jstring) env->CallObjectMethod
(myclass_object, methodID);
// convert the Java String to use it in C
str = env->GetStringUTFChars(s, 0);
printf("%s" , str);
env->ReleaseStringUTFChars(s, str);
}
The Java JNI wrapper would be class JavaHowTo {
public native void sayHello();
static {
System.loadLibrary("javahowto");
}
}
And finally, to use it public class JNIJavaHowTo {
public static void main(String[] args) {
JavaHowTo jht = new JavaHowTo();
jht.sayHello();
}
}
因为JAVA的默认编码是16位的Unicode,如果本地调用的对象使用的是8位的编码方式,那传进去一定是乱码了,反过来也一样.
解决的办法是把二者的编码强制转换成统一的.
如:new String("需转换的目标文本串","GB2312");即把原本是Unicode编码的自符串转换成传
GB2312传递进本地调用的对象中.
return(jstr);.java:String returned = new String (cReturned.getBytes("UnicodeLittleUned"));