Http &引用;“内存不足”;Win10 64位错误,但不是32位错误?

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文件夹(在参考中)加载 是不是因为我认为内存

我使用的代码来自Mark Bertenshaw的帖子:

在32位开发机器上,Mark的代码运行良好。但在我的64位机器上,代码处出现内存不足错误:

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