프로그래밍/MFC

COM 인스턴스 만들기 실패

에어버스 2018. 5. 27. 17:03

COM 인스턴스 만들기 실패

메인스레드가 CDlg 임에도 메인 스레드에서 아래 함수를 직접 호출할때
ATL 서버 연결 실패(6행)가 되는 경우, 이벤트 처리 방식으로 이벤트 처리기에서 함수를 호출하도록한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
BOOL CDlg::Request_거래()
{
    // TODO: 여기에 구현 코드 추가.
    CoInitialize(NULL);
    CComPtr<IAPI4> spObject;
    if (spObject.CoCreateInstance(__uuidof(API4), NULL, CLSCTX_LOCAL_SERVER) != S_OK)
    {
        AfxMessageBox(TEXT("ATL 서버 연결 실패!!!"));
        return FALSE;
    }
...
}
 
cs

Request 뿐만 아니라 ReleaseRequestData() 요청할때도 동일 증상이 있어 이벤트 처리기로 해야 했다.

(e종목검색 때 RequestService() 요청하고 COM Release 할때 에러가 나는데, 조회TR 요청하고 COM 해제를 하면 ReleaseRequestData() 요청하는 COM 인스턴스를 만들지 못하는 오류가 발생한다. 동작 순서상으로는 COM 해제 후 ReleaseRequestData() 가 되어야 하는데, COM 해제시 ReleaseRequestData() 가 호출되어 오류가 나는거 같아, ReleaseRequestData() 를 직접 호출하지 않고 이벤트 처리기로 처리해서 시간을 조금 지연 시킴 - 정확한 원인은 모름)