我有一个c++编写的dll文件,如何在java中调用 按照JNI的规范再写一个dll,通过这个dll调用你现在的这个dll。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 具体来说就是写好你的java文件,用javah 生成c++头文件,按照这个头文件写好你的cpp文件,可以在这个文件中调用你的dll。 you can get it in thinking in java class MyJavaClass { public int aValue; public void divByTwo() { aValue /= 2; }}public class UseObjects { private native void changeObject(MyJavaClass obj); static { System.loadLibrary("UseObjImpl"); } public static void main(String[] args) { UseObjects app = new UseObjects(); MyJavaClass anObj = new MyJavaClass(); anObj.aValue = 2; app.changeObject(anObj); System.out.println("Java: " + anObj.aValue); }}#include <jni.h>extern "C" JNIEXPORT void JNICALLJava_UseObjects_changeObject(JNIEnv* env, jobject, jobject obj) { jclass cls = env->GetObjectClass(obj); jfieldID fid = env->GetFieldID( cls, "aValue", "I"); jmethodID mid = env->GetMethodID( cls, "divByTwo", "()V"); int value = env->GetIntField(obj, fid); printf("Native: %d\n", value); env->SetIntField(obj, fid, 6); env->CallVoidMethod(obj, mid); value = env->GetIntField(obj, fid); printf("Native: %d\n", value);} http://www-900.ibm.com/developerWorks/cn/cnedu.nsf/java-onlinecourse-bytitle/BE3EC6A2DECACFE248256BE6000DAFBD?OpenDocument可以参考,应该可以实现的。就是要注意如果你的类有包名,就要在头文件中方法名字中也加上包名; 我解决了!!!!!!!!!!!!参考解决方法:不要使用Javah命令行生成.h文件,而是使用JBuilder来生成(具体在哪个地方,因为我现在没有JBuilder我不好说,你嫌自己找一下吧)。 !求助啊!!!!!!!!ObjectInputStream方法 从java程序中启动TOMCAT 如何检测1(2&3)是不合法的,而 1|(2&3) 是合法的。 关于JFACE中treeview控件内容的清空 Java群,新手请进! 这个操作数据库的问题好奇怪? 一个关于接口的问题 Spring MVC 控制Ip访问频次 路人甲大哥,请再指点 如何将泛型当作参数传递? 菜鸟问题 如何将jar文件打成安装包,安装后可以生成快捷方式,象windows程序一样直接运行而不用java classfile这样的命令。
public int aValue;
public void divByTwo() { aValue /= 2; }
}public class UseObjects {
private native void
changeObject(MyJavaClass obj);
static {
System.loadLibrary("UseObjImpl");
}
public static void main(String[] args) {
UseObjects app = new UseObjects();
MyJavaClass anObj = new MyJavaClass();
anObj.aValue = 2;
app.changeObject(anObj);
System.out.println("Java: " + anObj.aValue);
}
}#include <jni.h>
extern "C" JNIEXPORT void JNICALL
Java_UseObjects_changeObject(
JNIEnv* env, jobject, jobject obj) {
jclass cls = env->GetObjectClass(obj);
jfieldID fid = env->GetFieldID(
cls, "aValue", "I");
jmethodID mid = env->GetMethodID(
cls, "divByTwo", "()V");
int value = env->GetIntField(obj, fid);
printf("Native: %d\n", value);
env->SetIntField(obj, fid, 6);
env->CallVoidMethod(obj, mid);
value = env->GetIntField(obj, fid);
printf("Native: %d\n", value);
}
可以参考,应该可以实现的。就是要注意如果你的类有包名,就要在头文件中方法名字中也加上包名;
参考解决方法:
不要使用Javah命令行生成.h文件,而是使用JBuilder来生成(具体在哪个地方,因为我现在没有JBuilder我不好说,你嫌自己找一下吧)。