C# 将数组传递到互操作程序集
我在LabVIEW中创建了一个.NET互操作程序集,该程序集对输入数组执行数学函数,并将结果写入两个输出数组。签名为:C# 将数组传递到互操作程序集,c#,arrays,struct,interop,unmanaged,C#,Arrays,Struct,Interop,Unmanaged,我在LabVIEW中创建了一个.NET互操作程序集,该程序集对输入数组执行数学函数,并将结果写入两个输出数组。签名为: void CFit(Array Input__32Array, out Array Output__32Array, out Array Result__32Array) 在C#中,输入数组实际上是一个结构数组,其他两个输出数组是二维数组。如果我用这个 double[,] OutputArray = new double[1650, 2]; // Output1 double
void CFit(Array Input__32Array, out Array Output__32Array, out Array Result__32Array)
在C#中,输入数组实际上是一个结构数组,其他两个输出数组是二维数组。如果我用这个
double[,] OutputArray = new double[1650, 2]; // Output1
double[,] ResultArray = new double[20, 6]; // Output2
IData[] iData; //Input array
CFit( iData ,out ResultArray, out OutputArray);
编译器抛出错误-错误CS1503参数1:无法从“reflect\u UI.iData[]”转换为“reflect.CFit.Input\uuuuuuuu32array\uuuu32[]”*
IData结构在C中定义如下#
问题:如何将输入数组(结构数组)传递到此互操作程序集
这是我的第一篇文章。我将感谢任何帮助。提前感谢。根据CFit的定义,它需要数组类型参数。您需要将Idata输入转换为数组类型。有关数组类的更多信息,请在MSDN上找到。请发布LabView为相关程序集生成的所有相关接口代码。是否尝试使用结构而不是类?StructLayoutAttribute在引用类型上不是很有用。LabVIEW只生成签名-void CFit(数组输入\uuuu32Array、数组输出\uuu32Array、数组结果\uuu32Array)以及IData?你试过把它做成一个结构吗?
[StructLayout(LayoutKind.Sequential, Pack = 0)]
public class IData
{
[MarshalAs(UnmanagedType.R4)]
public float L;
[MarshalAs(UnmanagedType.I4)]
public int D;
[MarshalAs(UnmanagedType.R4)]
public float S;
[MarshalAs(UnmanagedType.I2)]
public short I;
[MarshalAs(UnmanagedType.I2)]
public short C;
}