System.ArgumentException: значение не попадает в ожидаемый диапазон - PullRequest
0 голосов
/ 18 октября 2011

Я работаю над компактным каркасом c # vs 2005. Моим КПК является устройство Pocket PC 2003.

Я установил приложение и успешно запустил его на устройстве PDA. Когда я выполнил проект для клиента, и когда он развернул и запустил приложение, он получает ошибку

"System.ArgumentException: значение не попадает в ожидаемый диапазон. at System.Text.ASCIIEncoding.GetBytes () ".

Трассировка стека здесь

Exception: System.ArgumentException: Value does not fall within the expected range.
at System.Text.ASCIIEncoding.GetBytes()
at  BinaryEncoder.EncodeVariableString()
at DataHolder.encodeValue()
at  UpdateInformation.encode()
at DataHolder.encodeValue()
at LogonRequest.encode()
at MessageFactory.getRequestMsg()
at MessageFactory.getRequestMsg()
at LogonManager.logon()
at doLogon()
at frmLogin.btnNext_Click()

public static int EncodeVariableString (строка str, byte [] rawData, int encodePos) {int curPos = encodePos; int len ​​= str.Length.ToString (). Length; curPos = EncodePositiveInt32 (len, rawData, curPos, 1);

                  curPos = EncodePositiveInt32(str.Length, rawData, curPos, len);

        return Encoding.ASCII.GetBytes(str, 0, str.Length, rawData, curPos) + curPos;         }

Клиент также вводит то же имя пользователя и пароль, но он получает ошибку, а я не получаю ошибку. Стоит выкинуть ошибку в обоих КПК правильно. Я жестко закодировал значения, данные клиентом. Он работает в моем КПК, но не работает в клиентском КПК. Одно отличие, которое я видел, в моем PDA Byte [] rawdata.length = 105 а в клиентском КПК это rawdata.length = 96.

Я не могу воспроизвести ошибку на моем устройстве.

Есть мысли по этому вопросу?

Спасибо

1 Ответ

1 голос
/ 18 октября 2011

Трассировка стека была бы хороша.Код вызова был бы хорош.Какая перегрузка GetBytes?Можете ли вы выяснить, какие данные передаются в GetBytes?

Согласно документации, есть три перегрузки GetBytes, которые выдают ArgumentException:

GetBytes(Char*, Int32, Byte*, Int32)

GetBytes(Char[], Int32, Int32, Byte[], Int32)

GetBytes(String, Int32, Int32, Byte[], Int32)

По сути, ошибка означает, что вы не далиGetBytes достаточно места для хранения полученных байтов.

Посмотрите на ваш вызывающий код, вы помните, чтобы выделить достаточно места для массива?

...