我正在研究compactframework c#vs 2005。 我的PDA设备是Pocket pC 2003设备。
我安装了我的应用程序并在我的PDA设备上成功运行。当我将项目发布到客户端时,当他部署并开始运行应用程序时,他收到错误
“System.ArgumentException:值不在预期范围内。 在System.Text.ASCIIEncoding.GetBytes()“。
Stack Trace就在这里
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(string 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中都出错。 我已经硬编码了客户端给出的值。它在我的PDA中工作,但它不能在客户端PDA中工作。 我看到的一个区别是,在我的PDA Byte [] rawdata.length = 105 在客户端PDA中,它是rawdata.length = 96。
我无法在设备中重现错误。
关于这个问题的任何想法?
由于
答案 0 :(得分:1)
堆栈跟踪会很好。调用代码会很好。 GetBytes
的哪个超载?你能算出传递给GetBytes
的数据吗?
根据文档,GetBytes
有三个重载会引发ArgumentException
:
GetBytes(Char*, Int32, Byte*, Int32)
GetBytes(Char[], Int32, Int32, Byte[], Int32)
GetBytes(String, Int32, Int32, Byte[], Int32)
基本上,错误表示您没有给GetBytes
足够的空间来存储结果字节。
看看你的调用代码,你还记得为数组分配足够的空间吗?