오류증상. 응용프로그램에서 ixingAPI.Init() 실행하여 xingAPI.dll 을 동적 로딩한 이후 응용프로그램 닫을때 발생하는 예외. 아래
디버그 버튼 클릭해서 내용확인해보면 아래와 같음.
즉, xingAPI.dll 은 mfc42.dll 을 이용하고 있고, 이 중에 0fc51129 호출시 위와 같은 에러가 뜬것이며, 이것에 대한 상세 정보가 아래 오른쪽 붉박이다.
xingAPI.dll 에서 mfc42.dll 의 GetValue 함수와 DestroyWindow 함수 호출시 위와 같은 에러가 발생한것으로 보인다.
상기 1번 에러는 프로그램 종료시에만 발생하기 때문에 실행중에는 문제를 일으키진 않는다.
2015년 12월 18일 오후 8시 기록.
위 오류가 발생하지 않게 하는 방법 확인하였다.
위 상황은 xingAPI.dll 을 로딩하는 함수를 UI Thread CyDevice1_UIT 내에서 버튼클릭시 InitDevice(); 호출되었을때는 프로그램 종료시 에러가 발생했는데,
CyFinAPIMainDlg 에서 CyDevice1_UIT 스레드 생성한 이후 InitDevice(); 호출하면 프로그램 종료시에도 예외 에러 발생하지 않았음.
즉 아래 파랑색 굵은 글자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | int CCyFinAPIMainDlg::OpenDevice(int cy_device_id) { DeviceHandlingID++; // Make_CUiThreadLXSDFUH1(DeviceHandlingID, device_handle, p_stream_data, p_device->UsbPID, numsample_return); // Create_CyDevice_UIT(DeviceHandlingID,cy_device_id); CCyDevice1_UIT* p_cydevice_UIT; p_cydevice_UIT = (CCyDevice1_UIT*)::AfxBeginThread(RUNTIME_CLASS(CCyDevice1_UIT), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED); // 중지상태로 UI Thread 생성. dic_pCyDeviceUIT[DeviceHandlingID] = p_cydevice_UIT;//생성된 ui thread 포인터를 dic에 저장해두기. // dic_pOpenUsbPid[usb_pid] = p_uithread_device; // p_uithread_device->PreSetting(device_handle, device_handling_id, p_stream_data, numsample_return, Status_WindowVisible); // Ui Thread의 초기셋팅사항처리. 여기서 전달해야할 인자등이 전달됨. - 장치핸들 전달. UI Thrad 실행전에 초기화 해야할것 여기서 수행한다. p_cydevice_UIT->ResumeThread();// ui thread 기동. 이 시점에 UI Thread 의 Initinstance 가 실행된다. p_cydevice_UIT->InitDevice(); // Device1 사용가능 상태 달성. DLL로딩, 서버접속, 로그인. 이걸 여기서 호출하면 응용프로그램 종료시 예외오류 안생김. return DeviceHandlingID; } |
///500.
'트레이딩' 카테고리의 다른 글
Order Modify Process. 주문정정처리. 관련 메시지 핸들러에서의 처리로직. (0) | 2016.01.09 |
---|---|
Order Routing State (주문전송상태). CyOrder 개체의 전송 상태- 정의. (0) | 2016.01.07 |
IOC, FOK, 시장가, 지정가,조건부 지정가, 최유리 지정가, 최우선 지정가. (0) | 2015.12.20 |
XingAPI.DLL 활용코딩. (0) | 2015.12.17 |
CyDevice 아이디 정의 및 대응하는 증권사 API 리스트. (0) | 2015.12.15 |
댓글