java调用dll如何转换object到VARIANT Jni调用C++ dll函数时函数参数和返回值类型为VARIANT, java中使用object与之对应,可是两者如何互相转换,能给具体做法吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 高分求解答,答对120分都给了,急用,帮忙,谢谢如果不用object,用其他的也行 C++中的中的VARIANT,他可以转换成任何类型.java中使用object,那么对应的JNI类型是jobject,对应的c++类型是:_jobject*.现在我们要做的就是把VARIANT转换成_jobject*,再把_jobject*转换成jobject,然后反回它就可以了.java: TestJNI.javapublic class TestJNI { public native Object test();}C++:TestNative.h中:/* * Class: TestNative.h * Method: test * Signature: ()Ljava/lang/Object; */JNIEXPORT jobject JNICALL Java_TestJNI_test(JNIEnv *, jobject);C++:TestNative.cpp中:JNIEXPORT jobject JNICALL Java_TestJNI_test(JNIEnv * pEnv , jobject obj){ Variant var; ... _jobject* _jobj = var; return _jobj;}注意:typedef _jobject *jobject;class _jobject {}; LZ呀.你想干什么呀?你的Variant到底存的是什么东西?这样好设计反回的类型呀.要是反回的类型太复杂,可以考虑用回调什么的. 我想调用一个C++编写dll中的一个函数,函数的参数为fun(VARIANT,BSTR,BARIANT*)BARIANT*用做存放希望返回的值,你能帮我解决一下参数的转换问题吗 你的BARIANT是一个自写义类型吧???? VARIANT用的就是oaidl.h定义的VARIANT类型,写错了,不好意思 呵呵 java: TestJNI.java public class TestJNI { public native Object test(); } C++:TestNative.h中: /* * Class: TestNative.h * Method: test * Signature: ()Ljava/lang/Object; */ JNIEXPORT jobject JNICALL Java_TestJNI_test(JNIEnv *, jobject); C++:TestNative.cpp中: JNIEXPORT jobject JNICALL Java_TestJNI_test(JNIEnv * pEnv , jobject obj){ Variant *var; fun(VARIANT,BSTR, var); return (*jobject)var;//这样应该可以了吧??你可以试试} 再问一下 怎样把一个java的object转换成VARIANT类型 java和c++的基本数据类型mapping,保持一致性。下面的表可以概括:Java类型 C++类型 JNI中定义的别名 int long jint long _int64 jlong byte signed char jbyte boolean unsigned char jboolean char unsigned short jchar short short jshort float float jfloat double double jdouble Object _jobject* jobject以上是基本数据类型的mapping,在是还复杂点的,那就得用特殊处理,比如回调等.*****************再问一下 怎样把一个java的object转换成VARIANT类型**********************C++的VARIANT可以转成任C++的基本数据类型.Object(JAVA-->jobject(JNI<C++>)-->_jobject*(C++)要是这样都还不清楚,那就用MSN或MAIL吧....在这里太墨迹了. 散分.... 我放弃了,呵呵,VARIANT参数总是整不好,不过还是谢谢你了 java thread类 关于eclipes程序的运行问题 大家帮忙啊,谢谢 Integer.valueOf()在win2000中是不是不好用啊? 如何让jtable中的boolean型数据用checkbox显示 一個關于死鎖的問題,需要你的見意 getvalueisadjusting 每个初学者都应该搞懂的问题(6) java中如何绘图? 菜鸟问题,关于paint方法的内部机制: 类型转换问题 GUI窗体的拆分
现在我们要做的就是把VARIANT转换成_jobject*,再把_jobject*转换成jobject,然后反回它就可以了.
java: TestJNI.java
public class TestJNI {
public native Object test();
}C++:TestNative.h中:
/*
* Class: TestNative.h
* Method: test
* Signature: ()Ljava/lang/Object;
*/
JNIEXPORT jobject JNICALL Java_TestJNI_test(JNIEnv *, jobject);C++:TestNative.cpp中:
JNIEXPORT jobject JNICALL Java_TestJNI_test(JNIEnv * pEnv , jobject obj){
Variant var;
...
_jobject* _jobj = var;
return _jobj;
}
注意:
typedef _jobject *jobject;
class _jobject {};
BARIANT*用做存放希望返回的值,你能帮我解决一下参数的转换问题吗
public class TestJNI {
public native Object test();
} C++:TestNative.h中:
/*
* Class: TestNative.h
* Method: test
* Signature: ()Ljava/lang/Object;
*/
JNIEXPORT jobject JNICALL Java_TestJNI_test(JNIEnv *, jobject); C++:TestNative.cpp中:
JNIEXPORT jobject JNICALL Java_TestJNI_test(JNIEnv * pEnv , jobject obj){
Variant *var;
fun(VARIANT,BSTR, var);
return (*jobject)var;//这样应该可以了吧??你可以试试
}
Java类型 C++类型 JNI中定义的别名
int long jint
long _int64 jlong
byte signed char jbyte
boolean unsigned char jboolean
char unsigned short jchar
short short jshort
float float jfloat
double double jdouble
Object _jobject* jobject
以上是基本数据类型的mapping,在是还复杂点的,那就得用特殊处理,比如回调等.*****************再问一下 怎样把一个java的object转换成VARIANT类型**********************
C++的VARIANT可以转成任C++的基本数据类型.
Object(JAVA-->jobject(JNI<C++>)-->_jobject*(C++)要是这样都还不清楚,那就用MSN或MAIL吧....在这里太墨迹了.