0

構造体の動的配列を返すC#でDLLに配置されたメソッドを使用しようとしています。何をしても、よく知られている「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが表示されます。これが私の最後のコードですが、それでもそのエラーが表示されます。

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

        }

私の主な問題は、構造体タイプ名(Cls_SMS.SMSReceive.STC_SMSReceive)を持つ構造体の動的配列を受信することであり、リモートサーバーへの接続などの他の側面は私の問題ではないことに注意してください。ベンダー定義の構造体の動的配列を*行の代入演算子の左側に割り当てたいだけです。

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

4

3 に答える 3

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;
}
于 2010-12-11T12:22:27.167 に答える
0

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

ここにはさまざまな可能性があります。

  • いくつかのシナリオでは、リターンnullが期待されるリターン値である可能性があります。ドキュメントを確認してください
  • 追加の構成が必要な場合もあれば、追加のメソッドを呼び出す必要がある場合もあります(GetTheData(); p)、またはこのデータが利用可能になる前に他のイベントを待つ必要があります-ドキュメントを確認してください
  • 多分それは単にライブラリのバグです。ベンダーに連絡する

3つのルートすべてが失敗した場合、個人的にはリフレクターを開いて、戻る可能性のあるシナリオを探しますnull。次に、ベンダーにバグを修正するか、必要に応じてドキュメントを明確にするように指示します。

于 2010-12-11T13:01:41.067 に答える
0

の個別の宣言を次のように置き換える場合xts

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

Visual Studioは現在どのタイプであると報告xtsしていますか?

カーソルにカーソルをxts合わせてツールチップから読み取るとわかります。

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

于 2010-12-11T13:17:16.837 に答える