2010-12-11 30 views
0

Je suis en train de consommer une méthode située DLL en C#, qui retourne un tableau dynamique de struct. Que jamais je fais, je reçois le bien savoir erreur « référence d'objet non définie à une instance d'un objet », voici mon dernier code et il dit encore cette erreur:méthode retourne un tableau dynamique de struct en C#, je ne peux pas consommer sa valeur de retour

string v_user = "kish"; 

     string v_pass = "u"; 

     string v_number = "p"; 

     string v_address = "url has been replaced with this string"; 

     string v_cid = "abc"; 

     Cls_SMS.SMSReceive.STC_SMSReceive[] xts; 

     Cls_SMS.SMSReceive px = new Cls_SMS.SMSReceive(); 

    // *** is the below line 

     xts = px.ExtendReceiveSMS(v_user, v_pass, v_number, v_address, v_cid); 

     int upper_bound = xts.GetUpperBound(0); 

     for (int counter = 0; counter < upper_bound; counter++) 

     { 

      Response.Write(xts[counter].Message.ToString()); 

      Response.Write("<br>"); 

     } 

s'il vous plaît noter que mon principal problème est de recevoir un tableau dynamique de structures avec le nom de type struct (Cls_SMS.SMSReceive.STC_SMSReceive) et d'autres aspects tels que la connexion au serveur distant n'est pas mon problème. Je veux juste allouer un tableau dynamique de structures définies par le fournisseur sur le côté gauche de l'opérateur d'affectation dans la ligne *.

S'il vous plaît aidez-moi. Merci beaucoup.

+0

Pouvez-vous définir "tableau dynamique" dans ce contexte? que retourne-t-il exactement? Un vecteur C# ('Foo []') n'est pas un "tableau dynamique" si vous voulez dire "cultivable". –

+0

Qu'est-ce que vous obtenez de l'ExtendReceiveSMS? – Jaime

+0

@Jaime: Je reçois une valeur nulle. – Farshid

Répondre

0

On ne sait pas comment la méthode px.ExtendReceiveSMS(v_user, v_pass, v_number, v_address, v_cid); affecte le tableau, il ne probablement affecte pas du tout à cause de l'exception. Voici comment vous pouvez attribuer un tableau dynamique et le retourner:

public STC_SMSReceive[] ExtendReceiveSMS() 
{ 
    STC_SMSReceive[] result = new STC_SMSReceive[2]; 
    result[0] = new STC_SMSReceive(); 
    result[1] = new STC_SMSReceive(); 
    return result; 
} 

également si elle est dynamique, vous pouvez aussi jeter un oeil à List<T>:

public IList<STC_SMSReceive> ExtendReceiveSMS() 
{ 
    IList<STC_SMSReceive> result = new List<STC_SMSReceive>(); 
    list.Add(new STC_SMSReceive()); 
    list.Add(new STC_SMSReceive()); 
    return result; 
} 
+0

ExtendReceiveSMS est le nom de la méthode que j'essaie de consommer. Cette méthode reçoit des messages SMS d'un serveur distant et pour chaque SMS qu'elle récupère, elle renvoie un membre struct du tableau de structures. J'ai besoin de définir un tableau dynamique de type STC_SMSReceive (qui est en fait un type struct) et l'assigner au résultat de la méthode px.ExtendReceiveSMS. – Farshid

+0

Notez également que je n'ai pas accès à la définition de la méthode ou de la structure. Je ne fais que le consommer. – Farshid

+1

@Farshid, OK, et lorsque vous parcourez votre code en mode débogage, que contient la variable 'xts' après avoir appelé cette méthode? Est-ce que 'xts' est nul? –

0

Cela n'a rien à voir avec le tableau strict; simplement, la méthode de bibliothèque que vous utilisez renvoie null.

Il existe différentes possibilités:

  • retour peut-être null est une valeur de rendement attendu pour certains scénarios; consultez la documentation
  • peut-être vous avez besoin d'une configuration supplémentaire, ou peut-être vous avez besoin d'appeler une méthode supplémentaire (GetTheData() serait trop plein d'espoir; p), ou attendre un autre événement avant ces données sont disponibles - consultez la documentation
  • c'est peut-être simplement un bogue de la bibliothèque; contactez le fournisseur

Si les 3 routes échouent, personnellement je venais de l'ouvrir réflecteur et pour trouver un scénario qui pourrait revenir null. Dites ensuite au fournisseur de corriger le bogue ou de clarifier la documentation, le cas échéant.

0

Si vous remplacez votre déclaration séparée de xts avec:

var xts = px.ExtendReceiveSMS(v_user, v_pass, v_number, v_address, v_cid); 

quel type ne Visual Studio maintenant Un xts être?

Vous pouvez dire en planant au-dessus xts avec votre curseur et lire hors l'info-bulle. À part cela, si le fournisseur indique que cela fonctionne pour d'autres utilisateurs, vous devez avoir un (ou plusieurs) des arguments erroné (e). Demandez au vendeur un exemple de code qui fonctionne afin que vous puissiez vérifier si cela se connecte correctement au serveur. Si c'est le cas, alors l'erreur est dans les autres arguments, sinon c'est un problème avec votre connexion au serveur.