我正在研究VB6中的一个项目。我必须添加下载功能。它包含1个表单,1个类模块和1个模块(bas)文件。当我将现有模块添加到我的项目时,它是成功的但是当我尝试将类模块或frm文件添加到项目时,它会显示OUT OF MEMORY。我一直在讨论这个问题很长一段时间但是找不到任何解决办法。
我无法发布任何代码,因为它是一个公司项目。我只能说它是一个包含数千行代码的庞大项目。我试图添加的模块用于通过HTTP下载文件,它访问Wininet.dll中的方法。
我不知道项目是否达到了代码行的最大限制,或者它是否是变量问题。
我听说制作DLL可以解决这个问题,但我们不需要这样做。有人可以帮忙吗?
答案 0 :(得分:5)
我认为我过去曾遇到过类似的事情,经过一些挖掘和尝试不同的事情后,我们发现这是项目中变量/表格/控件的数量。项目中可以包含的唯一变量,常量和控件名称的数量有限制。
我们证明它的方式是添加一个没有完全打破它的模块,然后添加一个空模块。在空模块中开始添加变量直到它中断,它不应该花费很长时间。
我们通过遍历代码并将表单上的标签名称更改为控件数组,使用字符串常量以及删除任何旧的不再需要的代码来修复它。尝试删除未使用的变量。
如果它让生活更轻松,你可以尝试将一些代码移到dll上。 希望这会有所帮助。
将目光投向此,子部分可能有所帮助: VB6 Project Limitations
答案 1 :(得分:-2)
你知道有两个或三个行可用的高级对象在Wininet中需要很多。
使用xmlhttp尝试这种方式。编辑网址等。如果它似乎工作注释if / end if转储信息,即使看起来工作。它的vbscript但vbscript在vb6中工作。
On Error Resume Next
Set File = WScript.CreateObject("Microsoft.XMLHTTP")
File.Open "GET", "http://www.microsoft.com/en-au/default.aspx", False
'This is IE 8 headers
File.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; .NET4.0E; BCD2000; BCD2000)"
File.Send
If err.number <> 0 then
line =""
Line = Line & vbcrlf & ""
Line = Line & vbcrlf & "Error getting file"
Line = Line & vbcrlf & "=================="
Line = Line & vbcrlf & ""
Line = Line & vbcrlf & "Error " & err.number & "(0x" & hex(err.number) & ") " & err.description
Line = Line & vbcrlf & "Source " & err.source
Line = Line & vbcrlf & ""
Line = Line & vbcrlf & "HTTP Error " & File.Status & " " & File.StatusText
Line = Line & vbcrlf & File.getAllResponseHeaders
wscript.echo Line
Err.clear
wscript.quit
End If
On Error Goto 0
Set BS = CreateObject("ADODB.Stream")
BS.type = 1
BS.open
BS.Write File.ResponseBody
BS.SaveToFile "c:\users\test.txt", 2