COM 인스턴스 만들기 실패 메인스레드가 CDlg 임에도 메인 스레드에서 아래 함수를 직접 호출할때 ATL 서버 연결 실패(6행)가 되는 경우, 이벤트 처리 방식으로 이벤트 처리기에서 함수를 호출하도록한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 BOOL CDlg::Request_거래() { // TODO: 여기에 구현 코드 추가. CoInitialize(NULL); CComPtr spObject; if (spObject.CoCreateInstance(__uuidof(API4), NULL, CLSCTX_LOCAL_SERVER) != S_OK) { AfxMessageBox(TEXT("ATL 서버 연결 실패!!!")); return FALSE; } ... } Colored by Color Sc..
ATL 디버깅 DCOM 디버깅 / COM디버깅 디버깅 시 Client 에서 로컬 ATL DCOM 서버 호출 시 아래와 같은 예외가 발생한다. 1. ATL 서버가 실행되어 있는지 확인한다. 2. ATL 서버가 중복 실행되어 있는지 확인한다. 3. 디버그 tlb를 가져와서 Client 를 컴파일 했는지 확인한다. 4. Client와 ATL서버의 전송하는 데이터 타입이 맞는지 확인한다. 특히, 구조체인 경우 멤버의 데이터 타입도 확인해줘야 한다. (예, Client 구조체의 CString 멤버를 ATL서버에 전달하면 디버깅 시 ATL 서버측 코드가 안보이고 위 그림처럼 나오므로, 반드시 BSTR 로 바꿔 구조체를 전달해야 한다.) ====== ATL 서버와 Client 둘 다 디버그 모드로 실행하면, Clie..
워커 쓰레드에서 메인윈도우 사용법, AfxGetMainWnd 주의점 - 쓰레드 호출 시 CMainFrame 포인터를 쓰레드에 전달해서 쓰레드에서 메인윈도우 다룰때 이 포인터를 이용한다. - 4행 처럼 쓰레드내에서 AfxGetMainWnd() 함수 호출하면 메인윈도우를 얻지 못해 예외 발생하는 경우가 있다. AfxGetMainWnd() 는 메인 쓰레드 내에서만 사용해야 한다. - 13행 처럼 포인터 전달이 어려우면, 4행처럼 App 클래스를 이용해서 메인윈도우에 접근한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 UINT 쓰레드네트워크감시(LPVOID arg) { // 로그인 성공하면 네트워크 감시시작 // CMainFrame* pMainFrame = (CMainFrame*)A..
윈도우 메시지 형식 ABM 응용프로그램 데스크톱 툴바 컨트롤 BM 버튼 컨트롤 CB 콤보박스 컨트롤 CBEM 확장된 콤보박스 컨트롤 CDM 공용 대화상자 컨트롤 DBT 장치(Device) DL 드래그 리스트박스 컨트롤 DM 기본 누름 버튼 컨트롤 DTM 날짜 및 시간 선택 컨트롤 EM 에디트 컨트롤 HDM 헤더 컨트롤 HKM 단축 키 컨트롤 IPM IP 주소 컨트롤 LB 리스트박스 컨트롤 LVM 리스트뷰 컨트롤 MCM 월별 달력 컨트롤 PBM 프로그래스바 컨트롤 PGM 페이저 컨트롤(Pager Control) PSM 프로퍼티 시트 RB 리바 컨트롤 SB 상태바 컨트롤 SBM 스크롤바 컨트롤 STM 스태틱 컨트롤 TB 툴바 TBM 트랙바(Trackbar) TCM 탭 컨트롤 TTM 툴팁 컨트롤 TVM 트리 ..