글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
마침, COM 관련한 자료를 보고 나니 생각이 나는군요.
이번 토픽은 "문제"와 함께 풀어나가는 식으로 구성을 해보겠습니다.(음... 이런 식으로 토픽 쓰는 시간을 벌 수도 있군요. ^^;)
참고로, 이 문제를 푸실 수 있는 자격은, 저에게 최초로 ^^ "ATL 강의"를 들었던 "L" 업체분들을 제외하고 모두 가능합니다.
제 사이트에 오시는 분들이 대부분 .NET만을 하시는 분들임을 감안하면, 거의 답변이 안 달릴 것 같은데... ^^;
[Q1] COM의 Apartment에 대해서 많이 들어보셨을 것입니다. STA, MTA가 대표적인 예이지요.
그럼, 다음과 같은 STA에서 생성된 STA COM 개체를 전역 변수에 보관했다가 다른 STA 스레드에서 호출하면 어떨까요? 이 코드는 "예외 없이" 동작할까요?
환경: SimpleObject COM 개체 - STA
Console Application
ISimpleObjectPtr g_ptr;
int _tmain(int , char** )
{
// STA 스레드에서 STA COM 개체를 생성
CoInitializeEx( NULL, COINIT_APARTMENTTHREADED );
{
g_ptr = ISimpleObjectPtr( __uuidof( SimpleObject ) );
g_ptr->MyMethod();
DWORD dwAnotherThreadID;
HANDLE hHandle = ::CreateThread( NULL, 0, AnotherThread, 0, 0, &dwAnotherThreadID );
CloseHandle( hHandle );
}
getchar();
g_ptr = 0;
CoUninitialize();
}
DWORD WINAPI AnotherThread( LPVOID lpParameter )
{
// STA 스레드에서 전역 변수로 존재하는 STA COM 개체를 직접 호출
CoInitializeEx( NULL, COINIT_APARTMENTTHREADED );
g_ptr->MyMethod();
CoUninitialize();
return 0;
}
[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]
... 181 182 183 184 185 186 187 188 189 190 191 192 193 194 [195] ...
... 181 182 183 184 185 186 187 188 189 190 191 192 193 194 [195] ...