글 수 44
COM 서버를 멀티쓰레드 환경에서 사용하기 위해서는, 즉 서버를 생성한 쓰레드와 서버의 메소드를 호출하는 쓰레드가 다른 경우에는 메소드 호출 시
응용 프로그램이 입력 동기화된 호출을 전달하고 있으므로 나가는 호출을 할 수 없습니다.
또는
응용 프로그램이 다른 스레드를 위해 배열된 인터페이스를 호출했습니다.
(The application called an interface that was marshalled for a different thread.)
라는 EOleSysError Exception이 발생한다.
이 문제를 해결하려면
프로젝트 소스에서
가 호출되기 전에
를 입력해 주거나 TThread의 Synchronize 함수를 사용해서 COM 서버를 생성한 메인 스레드에서 호출하도록 해야 한다.
응용 프로그램이 입력 동기화된 호출을 전달하고 있으므로 나가는 호출을 할 수 없습니다.
또는
응용 프로그램이 다른 스레드를 위해 배열된 인터페이스를 호출했습니다.
(The application called an interface that was marshalled for a different thread.)
라는 EOleSysError Exception이 발생한다.
이 문제를 해결하려면
프로젝트 소스에서
Application.Initialize;
가 호출되기 전에
CoInitFlags := COINIT_MULTITHREADED;
를 입력해 주거나 TThread의 Synchronize 함수를 사용해서 COM 서버를 생성한 메인 스레드에서 호출하도록 해야 한다.





