응용 프로그램이 종료 될 때 모드가없는 VB6 응용 프로그램이 어떻게 정리할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/123688

문제

VB6 응용 프로그램은 interop 양식 툴킷을 사용하여 .NET에 작성된 양식으로 작동합니다. 툴킷의 문서는 vb6 응용 프로그램이 종료 될 때 툴킷에 조언하기 위해 툴킷의 메소드를 호출하는 것이 좋습니다.

VB6 응용 프로그램은 스플래시 화면을로드 한 다음 여러 모드가없는 양식을 표시하는 하위 기본 절차를 사용합니다. Sub Main이 완료되면 응용 프로그램이 여전히 실행 중입니다. 응용 프로그램에서 툴킷에서 정리 방법을 종료하고 전화를 걸 수 있습니까?

도움이 되었습니까?

해결책

모듈 (아마도 서브 메인이 포함 된 동일한 모듈)에서 정리 코드를 보유 할 공개 서브 (예 : AppCleanup)를 만듭니다.

프로젝트에 클래스를 추가하십시오 (예 : Clsappcleanup). 이 클래스에서는 이전 단계에서 만든 서브를 호출하는 class_terminate 이벤트 핸들러에 코드를 추가하십시오.

모듈 (아마도 서브 메인을 포함하는 동일한 모듈)에서 ClsAppCleanup의 변수를 정의하십시오.

Sub Main에서는 Clsappcleanup을 인스턴스화합니다.

앱이 종료되면 클래스의 종료 이벤트로 인해 정리 코드가 실행됩니다.

다른 팁

VB6에 쓴 이후로 오래되었지만 올바르게 기억한다면 언로드 이벤트를 사용하여 정리 코드를 호출 할 수 있습니다 (.NET의 마감 이벤트와 유사). VB6 앱에 여전히 실행중인 다른 양식이 없는지 확인할 수도 있습니다.

FormCount 변수가 포함 된 모듈을 만듭니다. 이 변수는 응용 프로그램의 모든 양식에서 공유됩니다. 모든 form의 form_initialize 메소드에서 FormCount 변수를 증가시킵니다. 모든 form의 form_terminate 메소드에서 형태를 줄입니다. FormCount가 0으로 다시 떨어지면 Form 툴킷에 양식의 언로드를 알릴 수 있습니다.

vb6이 단일 스레드 응용 프로그램을 생성하기 때문에 멀티 스레딩 문제에 대해 걱정할 필요가 없습니다. 따라서 하나의 양식의 초기화 (또는 종료) 메소드가 실행을 시작하기 전에 완료됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top