본문 바로가기
트레이딩

XingAPI.DLL 활용 프로그램 종료시 죽는 문제해결.

by 리치굿맨 2015. 12. 17.

 

오류증상. 응용프로그램에서 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.


태그

댓글0


   
현물 |선물 인버스 |선물 USDT     현물 | 선물 USDT |봇제작툴/카피트레이딩     현물 |선물 인버스 |선물 USDT     선물 인버스 |선물 USDT