Система.ArgumentException: значение не попадает в ожидаемый диапазон

#c# #compact-framework #pocketpc

#c# #compact-framework #pocketpc

Вопрос:

Я работаю над compactframework c # против 2005. Моим устройством PDA является устройство Pocket pC 2003.

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

«Система.ArgumentException: значение не попадает в ожидаемый диапазон. в 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()
  

общедоступный статический int EncodeVariableString( строка str, байт[] RawData,
int encodePos ) { int CurPos = encodePos;
int len = str.Длина.toString().Длина; 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. где вы вызываете эту функцию?

2. Он может вводить символы, отличные от ASCII, а вы нет?

3. Какую из этих перегрузок использует ваш код? msdn.microsoft.com/en-us/library /…

Ответ №1:

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

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

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

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

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

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

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

Комментарии:

1. тот же код успешно выполняется в моем КПК. и оно не запущено на клиентском КПК. он также вводит те же значения для входа

2. Клиентский КПК локализован для английского или для какого-либо другого языка?

3. Кроме того, покажите свой код — вы, вероятно, делаете что-то где-то, где вы предполагаете 2 байта на символ в исходной строке.