2012-08-05 3 views
0

스레드 안전하지 않은 스레드에서 벗어나기 위해 COM out-of-process 개체를 래핑하려는 단일 스레드 라이브러리 (스레드로부터 안전하지 않음)를 다루고 있습니다. 각각의 새로운 COM 개체가 자체 프로세스에서 인스턴스화되는 동작이 필요합니다. 이는 out-of-process singleton 형식입니다.Out-of-process COM singletons

하드 코어 COM을 다루었으므로 오랜 시간이 걸렸습니다. 그래서이 문제에 접근하는 방법이나 이것이 어떤 속임수없이 가능한지 확실하지 않습니다.

답변

4

REGCLS 인수를 REGCLS_SINGLEUSE로 설정하여 CoRegisterClassObject()를 호출하십시오. 비용에주의하십시오. 프로세스는 이 아니며 저렴한 운영 체제 객체 인입니다.

마샬링 된 메서드 호출이 스레드로부터 안전하다는 것을 보장 할 수없는 이유가 없으면 CoInitializeEx()를 호출하여 STA를 요청하십시오. in-process 서버에서와 마찬가지로 out-of-process 서버에서도 작동합니다. 스레딩 문제를 해결하기 위해이 작업을 수행하는 경우에는 반드시 in-process STA를 선호하십시오. 메시지 루프가 필요합니다.

+0

고마워요! 프로세스가 비싸다는 것을 알지만이 스레드로 안전하지 않은 라이브러리를 사용하는 유일한 방법입니다. STA 요구 사항을 이해하지만 여러 CoCreateInstance()가 마샬링 된 Poiners를 여러 프로세스의 개체에 반환하는 방법을 확장 할 수 있습니까? 각 호출마다 새로운 프로세스가 생성됩니까? – wpfwannabe

+0

예, REGCLS_SINGLEUSE는 새 프로세스를 강제로 작성합니다. 스레드가 안전하지 않은 라이브러리에 대해 특별한 것이 없다는 가정을 피하십시오. 실제로 사소한 라이브러리는 스레드가 안전하지 않습니다. 이것이 바로 STA가 존재하는 이유입니다. S와 T는 단일 스레드를 의미합니다. –