VC++ CLI 프로그램 작성 시 와일드카드 확장

a.exe *.txt

와 같이 실행하는 명령줄 인터페이스 응용 프로그램을 작성할 때…
* 또는 ? 와 같은 와일드카드를 직접 구현한 코드로 처리하지 않고 확장된 결과로 넘겨 받을 수 있다.

link 할 때, 아래의 obj 파일을 함께 링크하는 간단한 설정만 하면 된다.

main() 함수를 사용하는 경우 – setargv.obj
wmain() 함수를 사용하는 경우 – wsetargv.obj

참고) https://docs.microsoft.com/en-us/cpp/c-language/expanding-wildcard-arguments?redirectedfrom=MSDN&view=vs-2019

std::locale로 현재 시스템의 locale 설정하기 (for Windows)

Windows 환경에서 STL의 기본 로케일 값이 한글 출력에 문제가 있을 수 있다.
현재 시스템 언어가 한글이라면 아래와 같은 방법으로 간단히? 설정할 수 있다.

struct InitSTLLocale {
    InitSTLLocale() {
        // C Locale에서 현재 시스템의 로케일(OEM Code Page) 설정 중 ctype과 collate만 덮어쓴 로케일로 생성한다
        std::locale loc(std::locale::classic(), ".OCP", std::locale::ctype | std::locale::collate);

        // 아래는 Ansi Code Page를 사용할 때
        std::locale loc(std::locale::classic(), ".ACP", std::locale::ctype | std::locale::collate);
        
        // 원하는 곳에 설정
        std::wcin.imbue(loc);
        std::wcout.imbue(loc);
        std::wcerr.imbue(loc);
        std::cin.imbue(loc);
        std::cout.imbue(loc);
        std::cerr.imbue(loc);
    }
} _gInitSTLLocale;