2017-10-17 78 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庫!

相關問題