2010-12-11 9 views
0

構造体の動的配列を返すC#でDLLの位置付けされたメソッドを使用しようとしています。私は今まで何を、私はエラー「オブジェクトのインスタンスに設定されていないオブジェクト参照」の周知を受け、ここに私の最後のコードであり、それはまだそのエラー通知します:メソッドは、C#で構造体の動的配列を返します。戻り値を使用することはできません。

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

     } 

に注意してください、という私の主な問題struct型の名前(Cls_SMS.SMSReceive.STC_SMSReceive)とリモートサーバへの接続などの他の側面を持つ構造体の動的配列を受け取ることは私の問題ではありません。私は、ベンダー定義の構造体の動的配列を*行の割り当てオペレータの左側に割り当てたいだけです。

私を助けてください。 ありがとうございます。

+0

このコンテキストで「ダイナミックアレイ」を定義できますか?それは正確に何を返すのですか? growableを意味するなら、C#ベクトル( 'Foo []')は "動的配列"ではありません。 –

+0

あなたはExtendReceiveSMSから何を得ていますか? – Jaime

+0

@Jaime:私はnull値を得ています。 – Farshid

答えて

0

px.ExtendReceiveSMS(v_user, v_pass, v_number, v_address, v_cid);メソッドが配列をどのように割り当てているかは不明ですが、例外のために配列が割り当てられていない可能性があります。ここでは、動的配列を割り当て、それを返すことができます方法は次のとおりです。

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

また、それが動的であれば、あなたも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は私が消費しようとしているメソッド名です。このメソッドは、リモートサーバーからSMSメッセージを受信し、取り出したSMSメッセージごとに構造体配列の構造体メンバを返します。私はSTC_SMSReceive型(実際にはstruct型)の動的配列を定義し、それをpx.ExtendReceiveSMSメソッドの結果に代入する必要があります。 – Farshid

+0

また、メソッドや構造体の定義にアクセスすることはできません。私はちょうどそれを消費しています。 – Farshid

+1

@Farshid、OK、デバッグモードでコードをステップ実行すると、このメソッドを呼び出した後に 'xts'変数には何が含まれますか? 'xts'はヌルですか? –

0

これは、厳密な配列とは何の関係もありません。単純に、使用しているライブラリメソッドはnullです。

様々な可能性がここにあります

  • 多分nullを返すことは、いくつかのシナリオについて、予想される戻り値です。 (GetTheData()があまりにも有望だろう; P)あなたには、いくつかの追加の設定を必要とする、または多分あなたは、いくつかの追加メソッドを呼び出す必要が
  • 多分マニュアルを確認するか、このデータが利用可能になる前に、いくつかの他のイベントを待つ - チェックドキュメントを
  • 多分それは単にライブラリのバグです。すべての3つのルートが失敗した場合は、ベンダーに個人的に

に連絡し、私はちょうどリフレクターそれを開くとnullを返す場合がありますシナリオを探したいです。その後、ベンダーにバグを修正するか、適切な文書を明確にするように指示します。

0

あなたとxtsのあなたの個別の宣言を交換する場合:

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

Visual Studioは今であることをxtsをどのようなタイプを報告しますか?

xtsをカーソルでホバーし、ツールチップから読み取って確認できます。

他にも、ベンダーが他のユーザーのために働いていると報告している場合は、1つ(またはそれ以上)の引数が間違っている必要があります。サーバーに適切に接続しているかどうかを確認できるように、いくつかのサンプルコードがベンダーに依頼してください。そうでなければ、エラーは他の引数にあります。そうでなければ、サーバーへの接続に問題があります。

関連する問題