2017-08-11 61 views
0

我有这种结构在C:如何在SWIG生成的Java包装中处理ptrdiff_t?

typedef struct THTensor { 
    ... 
    ptrdiff_t storageOffset; 
    ... 
} THTensor; 

然而,SWIG生成的Java代码为:

public SWIGTYPE_p_ptrdiff_t getStorageOffset() { 
    return new SWIGTYPE_p_ptrdiff_t(THJNI.THFloatTensor_storageOffset_get(this.swigCPtr, this), true); 
} 

我想的是ptrdiff_t转换为long在Java中,不是这个SWIGTYPE_p_ptrdiff_t,其中我无法访问实际的long值。

我该如何在SWIG中控制这个?

回答

1

有几种选择......但ptrdiff_t是SWIG未知的,并将其定义为long不是最好的主意。
我会做到以下几点:添加%include <stdint.i>到接口文件,然后可以添加在接口文件:

%define ptrdiff_t 
intptr_t 
%enddef 

或添加的源代码:

#ifdef SWIG 
    %define ptrdiff_t 
    intptr_t 
    %enddef 
#endif // SWIG 
... 
typedef struct THTensor { 
    ... 
    ptrdiff_t storageOffset; 
    ... 
} THTensor; 

在这种方式中,代码被包裹在界面中应该有ptrdiff_t的适当解释,而不仅仅是一个不透明的指针。

+0

谢谢!这对我有用。 –