오후 8:29 2006-01-05
bro@shinbiro.com 조경민
ATL COM 로컬 서버 Keep Alive 시키기
============================================================

COM 클라이언트의 Release() 호출로 서버의 object reference와
IClassFactory의 LockCount가 0이 되면 Com server는 자동으로 release된다.
즉, COM 서버 프로세스가 죽게 된다. 이를 막고 싶으면 아래 처럼 한다.


1. 서비스 타입이 아닌 COM 로컬 서버인 경우

extern "C" int WINAPI _tWinMain(HINSTANCE hInstance,
    HINSTANCE /*hPrevInstance*/, LPTSTR lpCmdLine, int /*nShowCmd*/)
{
       :
        _Module.m_nLockCnt++;    // 추가
        _Module.Start();
}

강제로 모듈의 내부 Lock Count를 증가시켜 아래와 같이 unlock이 일어나
WM_QUIT가 발생되는 것을 막는다.

LONG CServiceModule::Unlock()
{
    LONG l = CComModule::Unlock();
    if (l == 0 && !m_bService)
        PostThreadMessage(dwThreadID, WM_QUIT, 0, 0);
    return l;
}


2. 서비스 타입인 경우

Comserver.exe /service
하면 서비스로 등록되며, 서비스는 위 서비스 모듈 Unlock() 소스 처럼
WM_QUIT가 발생되지 않는다.

'KB > MFC/Win32' 카테고리의 다른 글

원격 프로세스 제어 (원격 스레드 생성)  (0) 2006.02.01
TCP 성능 향상  (0) 2006.01.31
DCOM with xp sp2  (0) 2006.01.06
ShowWeb function  (0) 2004.05.24
[펌] band object에서 IWebBrowser 인터페이스 받기.  (0) 2004.05.12

+ Recent posts