Метод возвращает динамический массив структур в C #, я не могу использовать его возвращаемое значение - PullRequest
0 голосов
/ 11 декабря 2010

Я пытаюсь использовать 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>");

        }

обратите внимание, что моя основная проблема заключается в получении динамического массива структур с именем типа структуры (Cls_SMS.SMSReceive.STC_SMSReceive) и других аспектах, таких как подключение к удаленному серверу, не является моей проблемой Я просто хочу разместить динамический массив определяемых вендором структур слева от оператора присваивания в строке *.

Пожалуйста, помогите мне. Большое спасибо.

Ответы [ 3 ]

0 голосов
/ 11 декабря 2010

Это не имеет ничего общего со строгим массивом; просто, используемый вами библиотечный метод возвращает null.

Здесь есть различные возможности:

  • может возвращать null - ожидаемое возвращаемое значение для некоторых сценариев; проверить документацию
  • может быть, вам нужна дополнительная конфигурация, или вам нужно вызвать какой-то дополнительный метод (GetTheData() было бы слишком многообещающе; p), или дождаться какого-то другого события, прежде чем эти данные станут доступны - проверьте документацию
  • возможно, это просто ошибка библиотеки; связаться с продавцом

Если все 3 маршрута потерпят неудачу, лично Я просто открою отражатель и найду сценарий, который может вернуть null. Затем скажите продавцу, чтобы он исправил ошибку, или уточните документацию соответствующим образом.

0 голосов
/ 11 декабря 2010

Если вы замените отдельную декларацию xts на:

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

какого типа Visual Studio теперь сообщает xts?

Вы можете узнать, наведя курсор на xts и прочитав его из всплывающей подсказки.

Кроме этого, если поставщик сообщает, что он работает для других пользователей, вы должны указать один (или несколько) аргументов неверно. Спросите у поставщика пример кода, который работает, чтобы вы могли проверить, правильно ли он подключается к серверу. Если это так, то ошибка в других аргументах, если нет, то это проблема с вашим подключением к серверу.

0 голосов
/ 11 декабря 2010

Непонятно, как метод 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;
}
...