关于byte[]太大,求解!100分相送!!!

nattystyle 2008-08-28 10:39:53
现在有一方法:


Private Function GetReverseConversion(ByVal AText As String) As String
Dim hIMC As IntPtr = WR_Imm32.ImmGetContext(Me.Handle)
Dim hKL As IntPtr = WR_Imm32.GetKeyboardLayout(0)
Dim list As New WR_Imm32.CANDIDATELIST
Dim dwSize As Integer = WR_Imm32.ImmGetConversionList(hKL, hIMC, AText, IntPtr.Zero, 0, WR_Imm32.GCL.REVERSE_LENGTH)
Dim BufList As IntPtr = Marshal.AllocHGlobal(dwSize)
WR_Imm32.ImmGetConversionList(hKL, hIMC, AText, BufList, dwSize, WR_Imm32.GCL.REVERSECONVERSION)
Marshal.PtrToStructure(BufList, list)
Dim buf(dwSize) As Byte
Marshal.Copy(BufList, buf, 0, dwSize)
Marshal.FreeHGlobal(BufList)
Dim os As Integer = list.dwOffset
Dim str As String = System.Text.Encoding.Unicode.GetString(buf, os, buf.Length - os - 3)
Return str
End Function


现在此方法当传进的参数AText字符串过长的时候,dwSize就溢出了,然后buf.Length - os - 3就变成负值了,这个问题该怎么解决好?
...全文
183 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanlongwuhui 2008-08-29
  • 打赏
  • 举报
回复
GetString的第3个参数是要解码的字节数,为负,不出错才怪呢。你分析下代码,前面有问题吧
beijingbeerman 2008-08-28
  • 打赏
  • 举报
回复
这种应该循环读取。
fengboawhf 2008-08-28
  • 打赏
  • 举报
回复
ding
lextm 2008-08-28
  • 打赏
  • 举报
回复
首先,建立对应单元测试,确定问题必然出现,然后断点跟进去仔细看看是哪里错了。感觉不像是溢出。
jzywh 2008-08-28
  • 打赏
  • 举报
回复
Process in stream
wdgphc 2008-08-28
  • 打赏
  • 举报
回复
你难道传进了一个大约2G的字符串?
Tiger_Zhao 2008-08-28
  • 打赏
  • 举报
回复
为什么不是 os(即 list.dwOffset)的值不正确?超过了 dwSize-3
nattystyle 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 phy 的回复:]
dwSize应该是一个Double Word的带符号数,有20多亿呢,你确定溢出了???
[/Quote]

不确定,不过AText一长就报错了,我也搞不清楚错在哪里,帮忙看看吧
brallow 2008-08-28
  • 打赏
  • 举报
回复
dwSize应该是一个Double Word的带符号数,有20多亿呢,你确定溢出了???
Tiger_Zhao 2008-08-28
  • 打赏
  • 举报
回复
所以应该看接口文档,为什么发生这种情况,该如何处理。
nattystyle 2008-08-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Tiger_Zhao 的回复:]
为什么不是 os(即 list.dwOffset)的值不正确?超过了 dwSize-3
[/Quote]

好像是的,当我输入长AText后,os = 7209057 ,dwSize = 156,然后因为buf.Length - os - 3 < 0然后就报错了

16,717

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧