如何将C#double数组传递给期望双ptr的接口C ++函数

时间:2017-03-08 19:44:07

标签: c#

我有一个用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

1 个答案:

答案 0 :(得分:0)

此问题是翻译过程中的一个无声错误。它是静默的,因为指针引用排序具有模糊含义,而C#是高度类型敏感的。指针可以是指向单个对象的指针,也可以是指向对象数组的指针。 MSIL选择了前一种解释 - 这是一个指向单个数据对象的指针。 MSIL希望开发人员依赖其解释来使用双pData [34]来指示数组对象是预期的。