Http &引用;“内存不足”;Win10 64位错误,但不是32位错误?
我使用的代码来自Mark Bertenshaw的帖子: 在32位开发机器上,Mark的代码运行良好。但在我的64位机器上,代码处出现内存不足错误:Http &引用;“内存不足”;Win10 64位错误,但不是32位错误?,http,memory,vb6,controls,out,Http,Memory,Vb6,Controls,Out,我使用的代码来自Mark Bertenshaw的帖子: 在32位开发机器上,Mark的代码运行良好。但在我的64位机器上,代码处出现内存不足错误: m_sOutput = StrConv(AsyncProp.Value, vbUnicode) http请求返回的数据非常简单{“response”:2}或{“response”:6}等 在32位计算机上,它正在从system32文件夹加载scrrun.dll,但在64位计算机上,它正在从sysWOW64文件夹(在参考中)加载 是不是因为我认为内存
m_sOutput = StrConv(AsyncProp.Value, vbUnicode)
http请求返回的数据非常简单{“response”:2}或{“response”:6}等
在32位计算机上,它正在从system32文件夹加载scrrun.dll,但在64位计算机上,它正在从sysWOW64文件夹(在参考中)加载
是不是因为我认为内存错误消息是一条转移视线的线索而导致了这个问题
用户控制(HTTPService)
从:
按钮代码
Private Sub cmdCheckNow_Click()
On Error GoTo err_trap
Call hideCheckNow
QProGIF1.Visible = True
Call DeleteUrlCacheEntry("http://mysite.co.uk/mobicleanud/chkupdates.php")
DoEvents
HttpService.Host = "mysite.co.uk"
HttpService.Port = 80
HttpService.Path = "/thefolder/chkupdates.php"
HttpService.QueryStringParameter("license") = licensekey
HttpService.QueryStringParameter("vers") = "SOFTWARE2"
HttpService.QueryStringParameter("appmajor") = App.Major
HttpService.QueryStringParameter("appminor") = App.Minor
HttpService.QueryStringParameter("apprevis") = App.Revision
txtOutput.Text = HttpService.Get_
If txtOutput.Text = "" Or IsNull(txtOutput.Text) Or txtOutput.Text = "({" & Chr(34) & "response" & Chr(34) & ":" & "9" & "})" Then
frmError.lblErrorMessage.Caption = "Licensing Server cannot validate the License Number! Error (9) - Please try again."
frmError.Show vbModal
Call showCheckNow
QProGIF1.Visible = False
DoEvents
Exit Sub
End If
If txtOutput.Text = "" Or IsNull(txtOutput.Text) Or txtOutput.Text = "({" & Chr(34) & "response" & Chr(34) & ":" & "8" & "})" Then
frmError.lblErrorMessage.Caption = "Licensing Server cannot validate the License Number! Error (8) - Please try again."
frmError.Show vbModal
Call showCheckNow
QProGIF1.Visible = False
DoEvents
Exit Sub
End If
If txtOutput.Text = "" Or IsNull(txtOutput.Text) Or txtOutput.Text = "({" & Chr(34) & "response" & Chr(34) & ":" & "7" & "})" Then
frmError.lblErrorMessage.Caption = "Licensing Server cannot validate the License Number! Error (7) - Please try again."
frmError.Show vbModal
Call showCheckNow
QProGIF1.Visible = False
DoEvents
Exit Sub
End If
If txtOutput.Text = "" Or IsNull(txtOutput.Text) Or txtOutput.Text = "({" & Chr(34) & "response" & Chr(34) & ":" & "6" & "})" Then
frmError.lblErrorMessage.Caption = "Licensing Server cannot validate the License Number! Error (6) - Please try again."
frmError.Show vbModal
Call showCheckNow
QProGIF1.Visible = False
DoEvents
Exit Sub
End If
QProGIF1.Visible = False
If txtOutput.Text = "({" & Chr(34) & "response" & Chr(34) & ":" & "2" & "})" Then
lblchecked.Caption = "Your License was validated and there is a new version of Mobiclean Pro available to Download and Install."
lblchecked.Visible = True
QProGIF1.Visible = False
DoEvents
cmdGet.Visible = True
Exit Sub
End If
If txtOutput.Text = "({" & Chr(34) & "response" & Chr(34) & ":" & "3" & "})" Then
lblchecked.Caption = "Your License was validated. You have the latest version of Mobiclean Pro - No Update available."
lblchecked.Visible = True
QProGIF1.Visible = False
DoEvents
Exit Sub
End If
exit_sub:
Exit Sub
err_trap:
frmError.lblErrorMessage.Caption = "An error has occurred - Code: " & Err.Number & " Description: " & Err.description
frmError.Show vbModal
Resume exit_sub
End Sub
只是找不到导致问题的原因
错误消息是
内存不足
如果基于64位Win 10构建
如果基于32位win 10构建并读取文件并继续,则不会显示错误消息没有问题您能否进一步缩小错误原因?是StrConv()自身失败,还是无法获取.Value属性?
.Value
应返回字节数组,因为vbAsyncTypeByteArray
<只有当字节数组包含当前计算机中的文本时,字节数组上的code>StrConv(vbUnicode)才是正确的。它很可能包含UTF-8,因此对其调用vbUnicode
肯定是错误的。要将字节数组正确转换为Unicode文本,请使用。谢谢@Dave,是的,您是正确的。如果字符串为空(不应该为空),则StrConv无法转换字符串。我现在添加了代码来处理这个问题,一切都很好。仍然不确定为什么它在32位机器上工作,而不是在64位机器上工作。@如果您是正确的,StrConv
在提供包含数组的变体时引发错误7。如果在未使用变量
包装器的情况下传递数组,则不会引发错误。但是,我在x86和x64窗口上都看到了这种行为。关于System32/SysWOW64文件夹:这是完全正常和预期的行为。VB6程序总是32位的。尽管有这些名称,但64位计算机中的System32文件夹具有64位DLL,而SysWOW64则具有32位版本。Windows中有一些兼容性层伪造东西,因此当32位程序请求System32时,它们会得到SysWOW64。文件夹名称非常混乱,但发现此方案导致的兼容性问题最少。您能否进一步缩小错误的原因?是StrConv()自身失败,还是无法获取.Value属性?.Value
应返回字节数组,因为vbAsyncTypeByteArray
<只有当字节数组包含当前计算机中的文本时,字节数组上的code>StrConv(vbUnicode)
才是正确的。它很可能包含UTF-8,因此对其调用vbUnicode
肯定是错误的。要将字节数组正确转换为Unicode文本,请使用。谢谢@Dave,是的,您是正确的。如果字符串为空(不应该为空),则StrConv无法转换字符串。我现在添加了代码来处理这个问题,一切都很好。仍然不确定为什么它在32位机器上工作,而不是在64位机器上工作。@如果您是正确的,StrConv
在提供包含数组的变体时引发错误7。如果在未使用变量
包装器的情况下传递数组,则不会引发错误。但是,我在x86和x64窗口上都看到了这种行为。关于System32/SysWOW64文件夹:这是完全正常和预期的行为。VB6程序总是32位的。尽管有这些名称,但64位计算机中的System32文件夹具有64位DLL,而SysWOW64则具有32位版本。Windows中有一些兼容性层伪造东西,因此当32位程序请求System32时,它们会得到SysWOW64。文件夹名称非常混乱,但发现此方案导致的兼容性问题最少。
Private Sub cmdCheckNow_Click()
On Error GoTo err_trap
Call hideCheckNow
QProGIF1.Visible = True
Call DeleteUrlCacheEntry("http://mysite.co.uk/mobicleanud/chkupdates.php")
DoEvents
HttpService.Host = "mysite.co.uk"
HttpService.Port = 80
HttpService.Path = "/thefolder/chkupdates.php"
HttpService.QueryStringParameter("license") = licensekey
HttpService.QueryStringParameter("vers") = "SOFTWARE2"
HttpService.QueryStringParameter("appmajor") = App.Major
HttpService.QueryStringParameter("appminor") = App.Minor
HttpService.QueryStringParameter("apprevis") = App.Revision
txtOutput.Text = HttpService.Get_
If txtOutput.Text = "" Or IsNull(txtOutput.Text) Or txtOutput.Text = "({" & Chr(34) & "response" & Chr(34) & ":" & "9" & "})" Then
frmError.lblErrorMessage.Caption = "Licensing Server cannot validate the License Number! Error (9) - Please try again."
frmError.Show vbModal
Call showCheckNow
QProGIF1.Visible = False
DoEvents
Exit Sub
End If
If txtOutput.Text = "" Or IsNull(txtOutput.Text) Or txtOutput.Text = "({" & Chr(34) & "response" & Chr(34) & ":" & "8" & "})" Then
frmError.lblErrorMessage.Caption = "Licensing Server cannot validate the License Number! Error (8) - Please try again."
frmError.Show vbModal
Call showCheckNow
QProGIF1.Visible = False
DoEvents
Exit Sub
End If
If txtOutput.Text = "" Or IsNull(txtOutput.Text) Or txtOutput.Text = "({" & Chr(34) & "response" & Chr(34) & ":" & "7" & "})" Then
frmError.lblErrorMessage.Caption = "Licensing Server cannot validate the License Number! Error (7) - Please try again."
frmError.Show vbModal
Call showCheckNow
QProGIF1.Visible = False
DoEvents
Exit Sub
End If
If txtOutput.Text = "" Or IsNull(txtOutput.Text) Or txtOutput.Text = "({" & Chr(34) & "response" & Chr(34) & ":" & "6" & "})" Then
frmError.lblErrorMessage.Caption = "Licensing Server cannot validate the License Number! Error (6) - Please try again."
frmError.Show vbModal
Call showCheckNow
QProGIF1.Visible = False
DoEvents
Exit Sub
End If
QProGIF1.Visible = False
If txtOutput.Text = "({" & Chr(34) & "response" & Chr(34) & ":" & "2" & "})" Then
lblchecked.Caption = "Your License was validated and there is a new version of Mobiclean Pro available to Download and Install."
lblchecked.Visible = True
QProGIF1.Visible = False
DoEvents
cmdGet.Visible = True
Exit Sub
End If
If txtOutput.Text = "({" & Chr(34) & "response" & Chr(34) & ":" & "3" & "})" Then
lblchecked.Caption = "Your License was validated. You have the latest version of Mobiclean Pro - No Update available."
lblchecked.Visible = True
QProGIF1.Visible = False
DoEvents
Exit Sub
End If
exit_sub:
Exit Sub
err_trap:
frmError.lblErrorMessage.Caption = "An error has occurred - Code: " & Err.Number & " Description: " & Err.description
frmError.Show vbModal
Resume exit_sub
End Sub