2017-10-17 79 views
0

我有一个像Cheva类似的问题,他的问题有: How to cast System.Object[*] to System.Object[]如何定义Output__32cluster [*]局部变量与输出参数的方法调用

还有一个从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

我想,终于,我有编译和有效的解决方案:

我做了一个单独的项目,与运行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库!

相关问题