3
給定以下SWIG接口定義:如何使用SWIG typemaps將結構成員從C++用P/Invoke編組爲C#?
%module example
%include "arrays_csharp.i"
%apply int INOUT[] {int *x}
struct mystruct
{
int *x;
}
SWIG產生以下(從mystruct.cs片斷):
public int[] x {
set {
examplePINVOKE.mystruct_x_set(swigCPtr, value);
}
get {
IntPtr cPtr = examplePINVOKE.mystruct_x_get(swigCPtr); // Error 1
SWIGTYPE_p_int ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_int(cPtr, false);
return ret; //Error 2
}
}
這導致VS2010以產生以下兩個錯誤:
Error 1 Cannot implicitly convert type 'int[]' to 'System.IntPtr'
Error 2 Cannot implicitly convert type 'LibLinear.SWIG.SWIGTYPE_p_int' to 'int[]'
位於上述代碼片段中標記的區域。
我開發了接口根據http://www.swig.org/Doc1.3/CSharp.html#CSharp_arrays_pinvoke_default_array_marshalling,它只談論功能而不是結構。結構成員的接口定義是否應該不同?