【发布时间】:2011-11-22 23:19:30
【问题描述】:
我有一个 SWIG 接口文件,它向我的 Java 应用程序公开一些 C 函数(通过 JNI),这些 C 结构用作 C 函数的输入(通过 SWIG/JNI)。 SWIG 将结构生成为 Java 类,但我不确定如何设置结构属性,因为设置器采用 SWIG 生成的类型。我需要先设置结构属性,然后再将其作为输入从我的 Java 类传递给 C 函数。 example_location_id_t_ 是我需要通过的类,但 Id 和 Phy_idx 的设置器采用以下 SWIG 类型。如何填充SWIGTYPE_p_unsigned_char 和SWIGTYPE_p_uint32_t 以便我可以设置SWIGTYPE_p_uint32_t 类的Id 和Phy_idx 属性?
setId(SWIGTYPE_p_unsigned_char value) 和 setPhy_idx(SWIGTYPE_p_uint32_t value)
package com.test.jni;
public class SWIGTYPE_p_unsigned_char {
private long swigCPtr;
protected SWIGTYPE_p_unsigned_char(long cPtr, boolean futureUse) {
swigCPtr = cPtr;
}
protected SWIGTYPE_p_unsigned_char() {
swigCPtr = 0;
}
protected static long getCPtr(SWIGTYPE_p_unsigned_char obj) {
return (obj == null) ? 0 : obj.swigCPtr;
}
}
package com.test.jni;
public class SWIGTYPE_p_uint32_t {
private long swigCPtr;
protected SWIGTYPE_p_uint32_t(long cPtr, boolean futureUse) {
swigCPtr = cPtr;
}
protected SWIGTYPE_p_uint32_t() {
swigCPtr = 0;
}
protected static long getCPtr(SWIGTYPE_p_uint32_t obj) {
return (obj == null) ? 0 : obj.swigCPtr;
}
}
package com.test.jni;
public class example_location_id_t_ {
private long swigCPtr;
protected boolean swigCMemOwn;
public example_location_id_t_ (long cPtr, boolean cMemoryOwn) {
swigCMemOwn = cMemoryOwn;
swigCPtr = cPtr;
}
public static long getCPtr(example_location_id_t_ obj) {
return (obj == null) ? 0 : obj.swigCPtr;
}
protected void finalize() {
delete();
}
public synchronized void delete() {
if (swigCPtr != 0) {
if (swigCMemOwn) {
swigCMemOwn = false;
ExampleJNI.delete_example_location_id_t_(swigCPtr);
}
swigCPtr = 0;
}
}
public void setId(SWIGTYPE_p_unsigned_char value) {
ExampleJNI.example_location_id_t__id_set(swigCPtr, this, SWIGTYPE_p_unsigned_char.getCPtr(value));
}
public SWIGTYPE_p_unsigned_char getId() {
long cPtr = ExampleJNI.example_location_id_t__id_get(swigCPtr, this);
return (cPtr == 0) ? null : new SWIGTYPE_p_unsigned_char(cPtr, false);
}
public void setPhy_idx(SWIGTYPE_p_uint32_t value) {
ExampleJNI.example_location_id_t__phy_idx_set(swigCPtr, this, SWIGTYPE_p_uint32_t.getCPtr(value));
}
public SWIGTYPE_p_uint32_t getPhy_idx() {
return new SWIGTYPE_p_uint32_t(ExampleJNI.example_location_id_t__phy_idx_get(swigCPtr, this), true);
}
public example_location_id_t_() {
this(ExampleJNI.new_example_location_id_t_(), true);
}
}
【问题讨论】:
标签: java java-native-interface swig