2017-10-17 7 views
0

j'ai un problème similaire comme Cheva avait dans sa question: How to cast System.Object[*] to System.Object[]Comment définir Output__32cluster [*] variable locale pour un appel de méthode avec le paramètre de sortie

Il est également question similaire de user7815: How to cast System.Object[*] to System.Object[]

dans mon cas, je voudrais appeler une méthode à l'intérieur d'un dll, qui est comme suit:

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

Remarque: Notez que le paramètre data est un paramètre de sortie!

Le Output__32cluster est comme suit:

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

Remarque: La méthode est dans une dll, où la version d'exécution est 4.0.x? Le projet et tous les autres dll est 4.5.2, que celui-ci est sous 4.0.x

J'ai essayé deux solutions différentes:.

 //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[*]' 

non d'entre eux travaille. Une idée?

Mise à jour: Visual Studio 2015; Version 14.0.25425.01

Veuillez poser des questions et/ou ajouter un commentaire avant de voter!

Répondre

0

Je pense, enfin, j'ai une solution qui compile et fonctionne:

J'ai fait un projet distinct, avec la version d'exécution 4.0.x comme suit:

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); 
    } 

} 

Avec cela, il est possible de faire ce qui suit:

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

Pourquoi est-ce différent dans ce cas? Le projet wrapper est toujours la bibliothèque 4.0.x!