Jni调用C++ dll函数时函数参数和返回值类型为VARIANT, java中使用object与之对应,可是两者如何互相转换,能给具体做法吗?

解决方案 »

  1.   

    高分求解答,答对120分都给了,急用,帮忙,谢谢如果不用object,用其他的也行
      

  2.   

    C++中的中的VARIANT,他可以转换成任何类型.java中使用object,那么对应的JNI类型是jobject,对应的c++类型是:_jobject*.
    现在我们要做的就是把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 {};
      

  3.   

    LZ呀.你想干什么呀?你的Variant到底存的是什么东西?这样好设计反回的类型呀.要是反回的类型太复杂,可以考虑用回调什么的.  
      

  4.   

    我想调用一个C++编写dll中的一个函数,函数的参数为fun(VARIANT,BSTR,BARIANT*)
    BARIANT*用做存放希望返回的值,你能帮我解决一下参数的转换问题吗
      

  5.   

    你的BARIANT是一个自写义类型吧????
      

  6.   

    VARIANT用的就是oaidl.h定义的VARIANT类型,写错了,不好意思 呵呵 
      

  7.   

    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;//这样应该可以了吧??你可以试试
      

  8.   

    再问一下 怎样把一个java的object转换成VARIANT类型
      

  9.   

    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吧....在这里太墨迹了.
      

  10.   

    散分.... 我放弃了,呵呵,VARIANT参数总是整不好,不过还是谢谢你了