문제

내 일상 업무 중 일부는 레거시 VB6 응용 프로그램을 유지 관리하고 확장하는 것입니다.공통 엔진은 C/C++로 작성되었으며 VB6은 성능 향상을 위해 이러한 기능을 사용합니다.

비동기 프로그래밍의 경우 C 인터페이스로는 충분하지 않으며 COM 컨트롤을 사용하여 VB6에 이벤트를 발생시킵니다.

내 문제는 VB6에 컨트롤을 등록할 때 VB가 이 컨트롤을 메모리에 로드하고 VB6 IDE를 종료할 때까지 언로드하지 않는다는 것입니다.컨트롤이 항상 로드되기 때문에 DLL 파일이 잠겨 있기 때문에 VC6에서 다시 컴파일할 수 없습니다.

내가 찾은 해결책은 VB에서 컨트롤을 활성화하는 것이 아니라 CreateObject() 내 컨트롤의 전체 이름으로.문제는 VB6이 내가 사용하고 있는 인터페이스에 대해 아무것도 모르고 IntelliSense에 액세스할 수 없기 때문에 컨트롤을 개체로 선언해야 한다는 점입니다. 이는 고통스러운 일입니다.

응용프로그램을 종료한 후 또는 IDE에서 직접 컨트롤을 언로드하도록 VB6에 어떻게 지시할 수 있는지 아십니까?

도움이 되었습니까?

해결책

VB6이 컨트롤을 언로드하도록 강제하는 좋은 방법은 없다고 확신합니다.

내가하는 일은 다음과 같습니다 ...Visual C와 Visual Basic을 나란히 실행하는 대신 VB6을 실행하십시오. 아래에 벤처캐피탈 :

  1. VC로드
  2. COM 개체가 포함된 프로젝트를 엽니다.
  3. 편집, 변경 등
  4. VC에서 출력 실행 파일을 적절한 명령줄 인수를 사용하여 VB6.EXE로 설정하여 VB6 작업 영역을 로드합니다.
  5. 이제 F5를 눌러 VB6 IDE를 실행하고 VB6 프로젝트를 로드하세요.
  6. COM 코드를 다시 변경하려면 VB6.EXE를 종료하고 변경한 다음 F5를 다시 누르십시오.작업 공간을 저장하는 한 VB6은 열려 있던 창과 모든 프로젝트 설정을 기억합니다.

이 방법의 장점:

  • COM 개체에 중단점을 설정하고 전체 소스 디버거를 사용하여 디버깅할 수 있습니다.
  • C와 VB를 동시에 디버깅할 수 있습니다.
  • VB6이 실행될 때마다 항상 최신 버전의 COM DLL이 있습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top