0

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

由于函数原型是非常基本的 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

4

0 回答 0