2014-04-30 4 views
1

VB6 프로젝트에서 일하고 있어요. 다운로드 기능을 추가해야합니다. 여기에는 1 개의 양식, 1 개의 클래스 모듈 및 1 개의 모듈 (bas) 파일이 들어 있습니다. 내 프로젝트에 기존 모듈을 추가하면 성공합니다.하지만 클래스 모듈이나 frm 파일을 프로젝트에 추가하려고하면 메모리 부족이라고 표시됩니다. 나는 꽤 오랫동안이 문제에 대해 머리를 깍지 만 어떤 해결책도 찾을 수 없었다.메모리 부족 오류 VB6 기존 클래스 모듈을 추가 할 때

회사 프로젝트이므로 코드를 게시 할 수 없습니다. 제가 말할 수있는 것은 수천 줄의 코드를 가진 거대한 프로젝트입니다. 추가하려고하는 모듈은 HTTP를 통해 파일을 다운로드하는 데 사용되며 Wininet.dll의 메서드에 액세스합니다.

프로젝트가 최대 코드 줄 수에 도달했는지 또는 변수 문제인지 여부를 알 수 없습니다.

DLL을 만드는 것이이 문제를 해결할 수 있다고 들었지만 필요하지 않습니다. 누구든지 도와 줄 수 있습니까?

+1

기존 (비어있는) 모듈 파일에 복사하여 붙여 넣기를 시도 했습니까? – Paul

+0

그래서이 프로젝트 (하나의 형식, 하나의 클래스 모듈 및 하나의 BAS 모듈)가 이전에 작동 했었다는 말입니까? 그래서 "기존 모듈"이라고 할 때 어떤 파일을 언급하고 있습니까? 그리고 "내 프로젝트"라고 할 때 어떤 프로젝트를 언급하고 있습니까? 마지막으로, 수천 줄의 코드가있는 전체 응용 프로그램이 * three * 파일에 있다고 말하는 것이 심각한가요? 드문 일입니다. 아마도 도움이되지만 코드를 작은 파일로 분해 할 수 있습니다. –

+0

@ Mark Bertenshaw 당신은 놀랄 것입니다. 우리 회사에는 끔찍한 코드가 있습니다. 수천 줄의 코드가 포함 된 단일 기본 파일에서 메서드를 호출하는 타이머가있는 폼을 표시하는 프로그램을 시작하는 일정에 따라 실행되는 여러 vb6 프로그램 ... 때로는 한 함수에서 발생합니다. 그들은 vb6이 더 이상 코드 줄을 허용하지 않기 때문에 (가장자리 경우에는 적용되지 않는 선을 제거하는) 그러한 것들이 존재하고, 그들은 나를 울게 만들었 기 때문에 특정 가장자리의 경우 기능을 추가하기 위해이 프로젝트 중 일부를 브랜치해야했습니다. – pinkfloydx33

답변

5

나는 과거와 비슷한 모습에 직면 해 있다고 생각합니다. 일부 파고 들기와 다른 일을 시도한 후에 프로젝트에서 사용 된 변수/폼/컨트롤의 수로 밝혀졌습니다. 프로젝트에서 가질 수있는 고유 한 변수, 상수 및 제어 이름의 수에는 제한이 있습니다.

우리가 그것을 깨뜨리지 않은 모듈을 추가하는 방법을 증명 한 다음 빈 모듈을 추가하십시오. 빈 모듈에서는 중단 될 때까지 변수를 추가하기 시작하므로 오래 걸리지 않아야합니다.

코드에서 폼의 레이블 이름을 컨트롤 배열로 변경하고 문자열에 상수를 사용하고 더 이상 필요하지 않은 코드를 제거하여 문제를 해결했습니다. 사용되지 않는 변수도 제거하십시오.

만약 당신이 인생을 더 쉽게하면 일부 코드를 dll로 옮길 수 있습니다. 희망이 도움이됩니다.

은 서브 섹션이 도움이 될 수 있습니다,이 위에 눈 캐스트 : VB6 Project Limitations

+0

선언이 추가 될 때까지 실험적으로 접근하는 것이 실제적인 의미를 갖는 유일한 방법입니다. –

+0

그래, 우리도 이걸 알아 냈어. 아마 너는 설명했던 것과 똑같을거야. 대답에 대해 많이 고마워 .... –

-2

당신은 높은 수준의 Wininet에 많은 필요로 어떤 두 개 또는 세 개의 라인에서하는 것을 가능 객체가 알고있다.

xmlhttp를 사용하여이 방법을 시도해보십시오. url 등을 편집하십시오. 작동하지 않는 것처럼 보이더라도 정보를 덤프하는 경우 if/end를 주석 처리합니다. 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