我正在使用 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