글쓴 사람
        정성태 (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;
}
[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]
        
        
                    
                    
                    
                    
                    
    
                    
                    
                    
                    
                    
                
             
        
        
        
        
        
        
        
            
        
        
        
        
        
        
        1  2  3  4  5  6  7  8  9  10  11  [12]  13  14  15  ...
1  2  3  4  5  6  7  8  9  10  11  [12]  13  14  15  ...