System.ArgumentException:值不在预期范围内

时间:2011-10-18 15:43:41

标签: c# compact-framework pocketpc

我正在研究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。

我无法在设备中重现错误。

关于这个问题的任何想法?

由于

1 个答案:

答案 0 :(得分:1)

堆栈跟踪会很好。调用代码会很好。 GetBytes的哪个超载?你能算出传递给GetBytes的数据吗?

根据文档,GetBytes有三个重载会引发ArgumentException

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

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

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

基本上,错误表示您没有给GetBytes足够的空间来存储结果字节。

看看你的调用代码,你还记得为数组分配足够的空间吗?