728x90
반응형
DEBUG 모드에서 콘솔을 사용하면 LOG를 실시간으로 확인할 수 있기 때문에 편리하다.
Dll이나 Application에서 콘솔을 사용하는 방법은 두 가지다.
첫 번째는 서브시스템으로 콘솔을 링크를 하는 것이다.
#pragma comment(linker, "/subsystem:console")
해당 코드를 기입하면 콘솔 프로그램에서 사용할 수 있는 cout 등을 이용할 수 있다.
두 번째는 AllocConsole() 함수를 이용하는 것이다.
AllocConsole() 함수를 실행한 후에는 WriteConsole() 함수로 콘솔에 텍스트를 적을 수 있다.
편리하게 사용하기 위해서 sprintf처럼 만들어 사용할 수 있다.
#define dp(fmt,...) topeng::dbg_print( fmt, __VA_ARGS__ )
#define dlp(fmt,...) topeng::dbg_print( "[%s %d] : " fmt, __FILE__,__LINE__, ##__VA_ARGS__ )
#define dpw(fmt,...) topeng::dbg_wprint( fmt, __VA_ARGS__ )
#define dlpw(fmt,...) topeng::dbg_wprint( "[%s %d] : " fmt, __FILE__,__LINE__, ##__VA_ARGS__ )
void dbg_wprint(const wchar_t *fmt, ...)
{
va_list ap;
wchar_t buf[_MAX_PRINT_SIZE];
va_start(ap, fmt);
vswprintf_s(buf, fmt, ap);
va_end(ap);
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwBytesWriten;
WriteConsoleW(handle, buf, wcslen(buf), &dwBytesWriten, 0);
}
void dbg_print(const char *fmt, ...)
{
va_list ap;
char buf[_MAX_PRINT_SIZE];
va_start(ap, fmt);
vsprintf_s(buf, fmt, ap);
va_end(ap);
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwBytesWriten;
WriteConsoleA(handle, buf, strlen(buf), &dwBytesWriten, 0);
}
728x90
반응형
'Program Language > API | MFC' 카테고리의 다른 글
[MFC] TreeCtrl Node 모두 확장하기 (2) | 2021.11.23 |
---|---|
[MFC] ID_FILE_OPEN 재정의 (0) | 2021.11.15 |
[MFC] 시스템 메뉴 삭제 (0) | 2021.09.27 |
[MFC] Frame 타이틀 고정하기 (0) | 2021.09.15 |
[MFC] Frame 크기 고정하기 (0) | 2021.09.15 |