[xingAPI][차트 데이터 수집기 만들기](2) 프로젝트 셋업

반응형

이전 포스팅에서 MFC 프로젝트 생성과 Dialog 화면 설계를 마쳤습니다. 이번 포스팅에서는 MFC 프로젝트에서 xingAPI를 사용할 수 있도록 xingAPI를 셋업 하는 방법을 알아보겠습니다.

 

이전 글 링크:

2021.10.01 - [트레이딩/시스템트레이딩] - [xingAPI][차트 데이터 수집기 만들기](1) 프로젝트 생성 및 화면 만들기

1. xingAPI 프로젝트 셋업

내가 작성하는 코드에서 xingAPI를 사용하기 위해서는 xingAPI에서 제공하는 DLL을 내 프로젝트에 로딩하고

xingAPI 헤더파일들을 내 프로젝트에 포함시켜야 합니다.

xingAPI의 DLL은 Debug, Release 두 가지 버전으로 구분되어 제공됩니다.

각각 다운로드하여서 비교해 보면 아래와 같이 DEBUG버전에는 파일 뒤에 d 가 붙어있고 xingAPI.dll 용량도 더 큽니다. 

Debug-Release DLL 차이점

비주얼스튜디오에서 Debug 모드로 빌드하면 Debug 버전 DLL, Release 모드로 빌드하면 Release 버전 DLL이 링크될 수 있도록 합니다. 아래와 같이 프로젝트의 Debug 폴더에 "xingdlldbg" 폴더 생성 후 Debug 버전 DLL 파일들을 복사, Release 폴더에 "xingdllrel" 폴더 생성 후 Release 버전 DLL 파일들을 복사합니다.

프로젝터 경로에 "xinghdr" 폴더 생성 후 주식차트와 관련된 TR의 헤더파일들을 복사합니다.

그리고 이 헤더파일들을 일괄적으로 include 할 수 있는 "allxingheaders.h" 파일을 생성하여 그 파일에 xinghdr에 복사한 헤더파일들을 include 합니다.

그리고 xingAPI 폴더의 예제소스코드를 뒤져보면 Helper.h, Helper.cpp가 있습니다.

그 파일들도 프로젝트에 복사합니다. IXingAPI.h 파일도 복사합니다.

위에서 추가한 파일들을 비주얼스튜디오의 솔루션 익스플로러에 추가해 줍니다.

윈도우 탐색기 폴더 구조와 솔루션 탐색기 구조
allxingheaders.h

2. xingAPI 빌드에러 수정하기

기본으로 복사한 파일을 빌드하면 문자열 관련 함수에서 threadsafe 에러가 발생합니다.

threadsafe 경고를 무시하는 방법도 있지만 그 함수들을 _s 가 붙은 threadsafe 함수로 변경해 줍니다.

IxingAPI.h 수정

3. Debug, Release 모드에 따른 DLL 분기 설정

Helper.cpp 파일의 GetModuleDir() 함수에 Debug, Release DLL 분기 코드를 작성해 줍니다.

컴파일 단계에서 Debug 모드이면 xingdlldbg, Release 모드이면 xingdllrel 하위의 DLL를 로드하게 됩니다.

Helper.cpp 수정

4. 프로젝트 속성 수정

프로젝트 속성 수정입니다.

DLL이 유니코드가 아닌 멀티바이트로 빌드되어있어서 이 부분을 바꿔줘야 합니다.

Project->Configuration Properties->Advanced->Character Set->Use Unicode Character Set을 Use Multi-Byte Character Set으로 변경합니다.

멀티바이트 캐릭터로 변경

5. 윈도 메시지 및 핸들러 등록

마지막으로 윈도우 메시지 및 핸들러 등록입니다.

xingAPI DLL 함수 Reference를 보면 API가 사용하는 8개의 Window User Message가 있습니다.

xingAPI 메시지 사양서

Window User Message는 User Interface Thread로 생성된 Dialog로 처리할 수 있습니다. 기본 Dialog에서 처리해도 되지만 메시지 처리를 전담하는 별도의 Dialog Class를 생성하겠습니다. Class Wizard에서 Add MFC Class 창을 띄워서 base class는 CDialogEx로 하고 Class name은 "CDlgXingMsg"로 합니다.

다이얼로그를 상속받는 클래스 생성

그리고 App 헤더파일에 아래와 같이 "IxingAPI.h"와 "CDlgXingMsg.h"를 include 합니다.

HTS서버 주소와 DEMO서버의 URL도 기입해 줍니다.

커스텀 메시지는 "WM_USER"부터 사용가능합니다. 아래와 같이 xingAPI가 사용하는 8개의 메시지를 정의해 줍니다.

참고로 WM_USER가 아닌 다른 값을 BASE로 정하면 일부 TR 응답이 오지 않습니다.

그리고 App 클래스에 멤버변수로 IXingAPI m_xing, CDlgXingMsg* m_pDlgXingMsg를 선언해 줍니다.

WM_USER 값부터 메시지 등록

CDlgXingMsg Class에 메시지맵을 등록하고 메시지 핸들러를 생성할 차례입니다.

Class Wizard에서 Class name을 CDlgXingMsg로 선택한 상태에서 Add Custom Message 버튼을 눌러 8개의 메시지를 등록해 줍니다.

메시지 핸들러 등록

등록을 완료하고 CDlgXingMsg에 가보면 아래와 같이 메시지 맵과 메시지 핸들러가 생성된 것을 확인할 수 있습니다.

메시지 핸들러 확인

CDlgXingMsg.h에 가서 핸들러 프로토타입이 protected로 되어 있으면 public으로 바꿔주세요.

호출될 수 있도록 public으로 변경

App.cpp의 InitInstance()의 DoModal() 호출구문 앞에 XingAPI DLL 초기화 코드를 넣어줍니다. 

그리고 CDlgXingMsg의 Create 코드를 작성해 주고 ExitInstance()에 Delete 코드를 작성해 줍니다.

초기화 코드 삽입
종료 코드 삽입

여기까지 하고 ctrl+F5로 빌드하면 에러 없이 실행되어야 합니다.

이제 xingAPI를 사용할 수 있습니다.

반응형