我有一个用C ++开发的控件对象。以下是C ++中的声明
DISP_FUNCTION_ID(CSmithsPlotCtrl, "SetSpectrumData", dispidSetSpectrumData, SetSpectrumData, VT_I4, VTS_BSTR VTS_I4 VTS_I4 VTS_R8 VTS_R8 VTS_I4 VTS_PR8)
LONG CSmithsPlotCtrl::SetSpectrumData(LPCTSTR pName, LONG yType, LONG xType, DOUBLE xBeg, DOUBLE xEnd, LONG nPoints, DOUBLE* pYData);
在C#中,在注册OCX文件并添加ocx作为参考然后作为组件之后,创建C#接口文件。
enter code here
[Clsid("{2636ef09-71d1-47b3-a1c8-afae9af75bd9}")]
[DefaultEvent("PointSelected")]
[DesignTimeVisible(true)]
public class AxSmithsPlot : AxHost
`enter code here`public virtual int SetSpectrumData(string pName, int ytype, int xtype, double xbeg, double xend, int nPoints, ref double pYData);
那么如何将声明为double[] pData = new double[5]
的pData传递给参数pYData
答案 0 :(得分:0)
此问题是翻译过程中的一个无声错误。它是静默的,因为指针引用排序具有模糊含义,而C#是高度类型敏感的。指针可以是指向单个对象的指针,也可以是指向对象数组的指针。 MSIL选择了前一种解释 - 这是一个指向单个数据对象的指针。 MSIL希望开发人员依赖其解释来使用双pData [34]来指示数组对象是预期的。