2012-08-08 4 views
0

COM 및 COleDispatchDriver를 사용하여 통신하는 여러 exe 파일로 구성된 응용 프로그램을 상속 받았습니다. 주요 "클라이언트"exe와 서비스를 제공하는 여러 "서버"실행 파일이 있습니다.COM 서버로 특정 EXE가있는 COleDispatchDriver

현재 클라이언트 프로세스는 COleDispatchDriver :: CreateDispatch()를 사용하여 서버를 시작하고 해결 된 응용 프로그램 ID를 클래스 ID로 전달합니다. 이 문제는 등록 된 COM 서버 (잠재적 인 실패 지점)에 의존한다는 것입니다. 컴퓨터에 여러 버전의 COM 서버가있는 경우 문제가 될 수도 있습니다.

이 시점에서 응용 프로그램을 완전히 다시 작성하지 않아도이 기능을 약하게 만들 수 있습니다. 통신을위한 동일한 메커니즘을 유지하지만 특정 서버 응용 프로그램을 명시 적으로 시작하는 방법이 있습니까? 클라이언트는 서버 응용 프로그램이 어디에 있고 무엇이 호출되는지 (같은 디렉토리의 클라이언트와 함께) 알고 있습니다.

답변

1

좀 더 까다 롭지 만 직접 필요한 인터페이스를 수동으로 마샬링 할 수 있습니다. CoMarshallInterface()을 사용하여 클라이언트 객체를 만드는 서버를 시작하고 클라이언트의 인터페이스를 다시 마샬링합니다.

일단 클라이언트가 인터페이스를 마샬링하면 QueryInterface를 호출하기 만하면 IDispatch 인터페이스를 확보 할 수 있습니다.

관련 문제