【发布时间】:2011-09-07 08:03:30
【问题描述】:
鉴于以下 SWIG 接口定义:
%module example
%include "arrays_csharp.i"
%apply int INOUT[] {int *x}
struct mystruct
{
int *x;
}
SWIG 产生以下内容(来自 mystruct.cs 的 sn-p):
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[]'
在上面代码sn-p标记的区域。
我按照http://www.swig.org/Doc1.3/CSharp.html#CSharp_arrays_pinvoke_default_array_marshalling开发的接口,只讲功能不讲结构。结构成员的接口定义应该不同吗?
【问题讨论】: