我有一个像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
请在投票前提出问题和/或添加评论!
答案 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库!