日期:2014-05-20  浏览次数:20616 次

关于一个JNI 参数传递的问题
我有个问题   请问下各位  
我现在有个vb的   .dll文件   ,里面函数为
closecomm(comm_value&   )
参数为   comm_value   的结构为

Public   Type   Comm_value  
com_port   As   String   *   3         //传入参数
dis_value   As   String   *   40     //传出参数  
data_len   As   String   *   2         //传出参数
End   Type

现在我使用jni的方法   重新用c++写个dll让java   调用

代码如下
main.h

class   comm_value{
  public:
      char   com_port[10];
      char   dis_value[40];
      char   data_len[2];

};

typedef   int   __stdcall   (*SendCard_c_mcom_set)(comm_value&   value);
typedef   int   __stdcall   (*SendCard_closecomm)(comm_value&   value);


main.cpp

JNIEXPORT   jint   JNICALL   Java_SendCardJava_c_1mcom_1set
    (JNIEnv   *   env,   jobject,   jobject   comm)
{
      jclass   commValueCls   =   env-> FindClass( "Comm_Value ");
      jfieldID   fid_CommValue_comport   =   env-> GetFieldID(commValueCls, "com_port ", "Ljava/lang/String; ");
      jobject   proCommport   =   env-> GetObjectField(comm,fid_CommValue_comport);
      jstring   ppCommPort   =   (jstring)env-> GetObjectField(proCommport,fid_CommValue_comport);

            HINSTANCE     DLLHandle;
            SendCard_c_mcom_set   sc_c_mcom_set;
            int   open_result   =   0;

            DLLHandle   =   LoadLibrary( "D:\\DGD4V3.0\\sendcard.dll ");     //

            if   (DLLHandle)   //call   crmp   timeout   hook
            {
                    try
                  {
                      sc_c_mcom_set   =   (SendCard_c_mcom_set)GetProcAddress(DLLHandle, "c_mcom_set ");
                      if   (sc_c_mcom_set)
                      {
                            -----------------------------------------
                            问题:   下面的我调用vb   的dll   中的函数   c_mcom_set   (Comm_value     &   parameter   )   parameter   参数应该如何转换成Comm_value   类
                                并使引用中的传出的2个参数怎样传出   希望大家能帮帮忙   谢谢~
                            open_result   =   sc_c_mcom_set(commValueCls);
                           
                      }