WBCS의 이점에도 불구하고 MBCS를 포기하지 못하는 이유는 다음과 같다.
- 이전에 만들어진 프로그램과의 호환성
- WBCS(유니코드)를 지원하지 못하는 사용자의 시스템
그래서 MBCS와 WBCS를 동시 지원하도록 개발을 해야한다.
(두가지로 나누어서 개발시 유지보수, 배포에 불편한점이 많다.)
windows 헤더 파일
#include <windows.h>
typedef char CHAR;
typedef wchar_t WCHAR;
#define CONST const
typedef CHAR* LPSTR;
typedef CONST CHAR* LPCSTR;
typedef WCHAR * LPWSTR;
typedef CONST WCHAR * LPCWSTR;
MBCS와 WBCS 동시 지원 매크로
#ifdef UNICODE
typedef WCHAR TCHAR;
typedef LPWSTR LPTSTR;
typedef LPCWSTR LPCTSTR;
#else
typedef CHAR TCHAR;
typedef LPSTR LPTSTR;
typedef LPCSTR LPCTSTR;
#endif
#ifdef _UNICODE
#define __T(x) L##x //__T("ABC") => L"ABC" 이렇게 변경된다. (x에 L을 붙여라)
#else
#define __T(x) x
#endif
#define _T(x) __T(x)
#define _TEXT(x) __T(x)
MBCS와 WBCS 동시 지원 함수
#ifdef _UNICODE
#define _tmain wmain
#define _tcslen wcslen
#define _tprintf wprintf
#define _tscanf wscanf
#else
#define _tmain main
#define _tcslen strlen
#define _tprintf printf
#define _tscanf scanf
#endif
동시 지원 프로그래밍 예시
LPTSTR str1 = _T("MBCS or WBCS1");
TCHAR str2[] = _T("MBCS or WBCS2");
TCHAR str3[100];
TCHAR str4[50];
LPCTSTR pStr = str1;
_tprintf(_T("string size " %d \n"), sizeof(str2));
_tprintf(_T("string length : %d \n"), _tcslen(pStr));
_fputts(_T(intput String 1 : "), stdout);
_tscanf(_T("%s"), str3);
'뇌를 자극하는 윈도우즈 시스템 프로그래밍 > 개념' 카테고리의 다른 글
Direct 모드와 Indirect 모드 (0) | 2019.03.18 |
---|---|
프로그램 구현 관점에서의 WIN32 vs WIN64 // 오류의 확인 GetLastError 함수 (0) | 2019.03.18 |
Windows에서의 유니코드, 아스키코드, MBCS (0) | 2019.03.12 |
클럭 신호 (0) | 2019.03.12 |
CPU에 대한 이해 (0) | 2019.03.12 |