문제
내 일상 업무 중 일부는 레거시 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을 실행하십시오. 아래에 벤처캐피탈 :
- VC로드
- COM 개체가 포함된 프로젝트를 엽니다.
- 편집, 변경 등
- VC에서 출력 실행 파일을 적절한 명령줄 인수를 사용하여 VB6.EXE로 설정하여 VB6 작업 영역을 로드합니다.
- 이제 F5를 눌러 VB6 IDE를 실행하고 VB6 프로젝트를 로드하세요.
- COM 코드를 다시 변경하려면 VB6.EXE를 종료하고 변경한 다음 F5를 다시 누르십시오.작업 공간을 저장하는 한 VB6은 열려 있던 창과 모든 프로젝트 설정을 기억합니다.
이 방법의 장점:
- COM 개체에 중단점을 설정하고 전체 소스 디버거를 사용하여 디버깅할 수 있습니다.
- C와 VB를 동시에 디버깅할 수 있습니다.
- VB6이 실행될 때마다 항상 최신 버전의 COM DLL이 있습니다.
제휴하지 않습니다 StackOverflow