如何使用输出参数

时间:2017-10-17 16:01:27

标签: c# .net version

我有一个像Cheva在他的问题中遇到的类似问题: How to cast System.Object[*] to System.Object[]

来自user7815也有类似的问题: How to cast System.Object[*] to System.Object[]

在我的情况下,我想在dll中调用一个方法,如下所示:

     public static uint ReadFIFO_FPGA(out Output__32cluster[] data, out uint remaining, out uint recievedTotal);

注意:请注意,参数data是输出参数!

Output__32cluster如下:

public struct Output__32cluster
{
    [Index(0)]
    public double element1;
    [Index(1)]
    public uint element2;
}

注意: 该方法是在dll中,运行时版本是4.0.x?该项目和所有其他dll是4.5.2。只有这个是4.0.x

我尝试了两种不同的解决方案:

        //ExtClass.Output__32cluster[] data_ = new ExtClass.Output__32cluster[10000];
        var data_ =
            Array.CreateInstance(
                typeof(ExtClass.Output__32cluster),
                new[] { 10000 },
                new[] { 1 }
                );

        received = ExtClass.ReadFIFO_FPGA(out data_, out remaining, out recievedTotal);
        // CS1503  Argument 1: cannot convert from 'out System.Array' to 'out ExtClass.Output__32cluster[*]' 
        // CS1503  Argument 1: cannot convert from 'out ExtClass.Output__32cluster[]' to 'out ExtClass.Output__32cluster[*]'

不是他们的作品。有什么想法吗?

更新:Visual Studio 2015;版本14.0.25425.01

请在投票前提出问题和/或添加评论!

1 个答案:

答案 0 :(得分:0)

我想,最后,我有一个编译和工作的解决方案:

我创建了一个单独的项目,运行时版本4.0.x如下:

public class MyWrapper
{
    public static ExtNS.ExtClass.Output__32cluster[]  CreateArray(int num)
    {
        return new ExtNS.ExtClass.Output__32cluster[num];
    }

    public static uint ReadFIFO_FPGA(out ExtNS.ExtClass.Output__32cluster[] data, out uint remaining, out uint recievedTotal)
    {
        return ExtNS.ExtClass.ReadFIFO_FPGA(out data, out remaining, out recievedTotal);
    }

}

使用此功能,可以执行以下操作:

        var data_ = MyHelper.MyWrapper.CreateArray(1000);
        received = MyHelper.MyWrapper.ReadFIFO_FPGA(out data_, out remaining, out recievedTotal);

为什么在这种情况下有所不同?包装器项目仍然是4.0.x库!