Java / JNI / SWIG:如何获取指针传递的long的值?

时间:2012-06-27 20:14:06

标签: pointers java-native-interface swig long-integer

我正在使用SWIG生成的代码将我的Java代码连接到C DLL。 来自Java代码的调用工作,函数被调用并且返回值是正确的,但是一旦到达Java代码,指针传递的long(这是函数给出的真实数据)的值就会丢失。

由于函数原型是非常基本的C,我希望它可以工作,但事实并非如此。

你知道我应该改变什么吗?

谢谢。

DLL函数原型:

long viOpenDefaultRM (unsigned long * vi);

SWIG生成的C代码:

SWIGEXPORT jint JNICALL Java_visa_1javaJNI_viOpenDefaultRM(JNIEnv *jenv, 
                                                  jclass jcls, jlong jarg1) {
  jint jresult = 0 ;
  unsigned long *arg1 = (unsigned long *) 0 ;
  long result;

  (void)jenv;
  (void)jcls;
  arg1 = *(unsigned long **)&jarg1; 
  result = (long)viOpenDefaultRM(arg1);
  jresult = (jint)result; 
  printf("C: jarg1 = %d\n", jarg1);    // added for debug
  return jresult;
}

调用本机方法的Java代码:

SWIGTYPE_p_unsigned_long defaultRM = new SWIGTYPE_p_unsigned_long();
int status = visa_java.viOpenDefaultRM(defaultRM);
System.out.println("defaultRM = " + SWIGTYPE_p_unsigned_long.getCPtr(defaultRM));

终端输出:

C: jarg1 = 79348104
defaultRM = 0

问题: defaultRM应该等于jarg1

0 个答案:

没有答案