#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 байта на символ в исходной строке.