Program Language/API | MFC

[MFC] App 혹은 Dll에서 콘솔 사용하기

야곰야곰+책벌레 2021. 9. 27. 10:17
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