尝试添加现有类模块时出现内存不足错误 VB6
Posted
技术标签:
【中文标题】尝试添加现有类模块时出现内存不足错误 VB6【英文标题】:Out of Memory Error VB6 when try to add an existing Class module 【发布时间】:2014-04-30 11:12:45 【问题描述】:我正在使用 VB6 开发一个项目。我必须添加下载功能。它包含 1 个表单、1 个类模块和 1 个模块(bas)文件。当我将现有模块添加到我的项目中时,它是成功的但是当我尝试将类模块或 frm 文件添加到项目中时,它说 OUT OF MEMORY。很长一段时间以来,我一直在努力解决这个问题,但找不到任何解决方案。
我不能发布任何代码,因为这是一个公司项目。我只能说这是一个包含数千行代码的庞大项目。我尝试添加的模块用于通过 HTTP 下载文件,它访问 Wininet.dll 中的方法。
我不知道项目是否达到了代码行数的最大限制,还是变量的问题。
我听说制作一个 DLL 可以解决这个问题,但我们不需要那个。有人可以帮忙吗?
【问题讨论】:
您是否尝试过复制并粘贴到现有(空)模块文件中? 所以你的意思是这个项目(一个表格,一个类模块和一个BAS模块)以前工作过?那么当您说“现有模块”时,您指的是哪个文件?当您说“我的项目”时,您指的是哪个项目?最后,你是认真地说整个应用程序有数千行代码在三个文件中吗?这很不寻常。除了将代码分解成更小的文件之外,您可能会有所帮助。 @Mark Bertenshaw 你会感到惊讶。我的公司有一些可怕的代码。几个按计划运行的 vb6 程序启动程序,该程序显示一个带有计时器的表单,该表单调用包含数千行代码的单个 bas 文件中的方法......有时在一个函数中。他们不得不分支其中一些项目来为某些边缘情况添加功能,因为 vb6 不允许更多的代码行(删除不适用于边缘情况的行)这样的事情存在,他们让我哭了跨度> 我明白这是一个糟糕的情况,但我想让您说的是“什么操作阻止了您的代码运行?”。最佳答案有很好的建议,但我担心你需要提供更多(乏味!)细节。由于您还没有选择答案,看来您还不满意。 我想我想让你做的是为这个错误提供一个逐步重现的案例。到目前为止,您在什么时候得到内存不足错误有点模棱两可。在 IDE 中或在运行时执行文件操作?请尽可能详细地编辑原始帖子。 【参考方案1】:我想我过去也遇到过类似的事情,经过一些挖掘和尝试不同的事情,结果是我们在项目中拥有的变量/表单/控件的数量。您可以在项目中拥有的唯一变量、常量和控件名称的数量是有限的。
我们证明它的方法是添加没有完全破坏它的模块,然后添加一个空模块。在空模块中开始添加变量,直到它中断,它不应该花费很长时间。
我们通过检查代码并将表单上的标签名称更改为控制数组、对字符串使用常量以及删除任何不再需要的旧代码来解决此问题。尝试删除未使用的变量。
如果它使生活更轻松,您可以尝试将一些代码移到 dll 中。 希望这会有所帮助。
仔细看看这个,子部分可能会有所帮助: VB6 Project Limitations
【讨论】:
添加声明直到中断的实验性方法是唯一具有实际意义的方法。 是的,我们也解决了这个问题...可能与您解释的相同...非常感谢您的回复...【参考方案2】:您知道有一些高级对象可用,它们只需两三行就可以完成在 Wininet 中需要很多操作的操作。
使用 xmlhttp 试试这个方法。编辑网址等。如果它似乎工作注释掉 if / end if to dump info 即使看起来工作。它是 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
【讨论】:
以上是关于尝试添加现有类模块时出现内存不足错误 VB6的主要内容,如果未能解决你的问题,请参考以下文章
使用 R 和 XLConnect 包时出现“内存不足错误 (Java)”