我正在尝试使用SWIG为C ++代码创建一个C#包装器,类似于以下内容:
class blah {
...
public:
float *getVarA() { return a; }
private
float *a;
...
}
在我的界面文件中,我使用以下%apply:
%apply float OUTPUT[] { float *getVarA() }
这会导致C#包装器返回float [],但包装器函数不知道float * a是什么。这会导致过多的错误:
Cannot implicitly convert type 'float[]' to 'System.IntPtr'
创建了包装函数:
public float[] getVarA() {
IntPtr cPtr = SpectrumPINVOKE.blah_getVarA(swigCPtr);
SWIGTYPE_p_float ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_float(cPtr, false);
return ret;
}
使用非指针类型时,例如:
class blah {
...
public:
int getVarB() { return b; }
private:
int b;
...
}
我得到了一个很好的正确
public int getVarB() {
int ret = SpectrumPINVOKE.blah_getVarB(swigCPtr);
return ret;
}
我阅读的2.0文档比我想要的更多,但是我在某个地方遗漏了一些东西而且我现在找不到它。感谢。