2017-08-11 59 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

謝謝!這對我有用。 –