정보: GUI 응용 프로그램에서 CRT 출력 루틴 호출

기술 자료 번역 기술 자료 번역
기술 자료: 105305 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

요약

GUI 응용 프로그램에서 printf() 같은 C 런타임 출력 루틴을 사용하려면 필요한 콘솔을 만들 수 있습니다. Win32 응용 프로그래밍 인터페이스 (API) AllocConsole() 콘솔을 만듭니다. CRT 일상적인 setvbuf() 출력 즉시 볼 수 있도록 버퍼링 제거합니다.

명령줄 에서 또는 파일 관리자에서 GUI 응용 프로그램을 실행할 경우 이 메서드는 사용할 수 있습니다. 그러나 응용 프로그램 관리자에서 또는 "시작" 명령을 통해 시작한 경우 이 메서드는 작동하지 않습니다. 이 문제를 해결하려면 방법을 보여 주는 코드입니다:
   int hCrt;
   FILE *hf;

   AllocConsole();
   hCrt = _open_osfhandle(
             (long) GetStdHandle(STD_OUTPUT_HANDLE),
             _O_TEXT
          );
   hf = _fdopen( hCrt, "w" );
   *stdout = *hf;
   i = setvbuf( stdout, NULL, _IONBF, 0 );
				
이 코드는 올바른 콘솔 출력 핸들 새 하위 수준의 CRT 핸들을 위로, 새 스트림 저수준 핸들과 연결합니다 열리고 해당 새 스트림 stdout 바꿉니다. 이 프로세스는 printf(), puts(), 등과 같은 표준 출력에 사용할 기능을 수행합니다. stdin stderr 동일한 절차를 사용하십시오.

참고가 이 코드는 핸들 0, 1 및 2 문제가 해결되지 않습니다. 사실 다른 긴급하지는 인하여, 이 문제를 해결할 수 없습니다. %0 및 따라서 대신 하위 수준 I/O I/O 스트림을 사용하는 데 필요한 것입니다.

추가 정보

GUI 응용 프로그램은 사용하여 "" 명령, 세 가지 표준 OS STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, STD_ERROR_HANDLE 모두 체크 0으로 처리하는"시작 함께 콘솔 초기화 루틴은 시작할 때. AllocConsole() GUI 응용 프로그램을 호출할 때 이러한 세 가지 핸들은 유효한 값으로 바뀝니다. 이 작업이 완료되면 따라서 GetStdHandle() 호출하면 항상 올바른 핸들 값을 반환합니다. 문제가 응용 프로그램에 AllocConsole() 호출할 수 있는 기회를 전에 CRT 이미 초기화를 완료했습니다. 그리고 낮은 세 개의 I/O 핸들 0, 1 및 2 이미 모든 CRT I/O 잘못된 OS 핸들을 보내고 CRT 출력 콘솔에서 나타나지 않으므로 OS 핸들을 out 0으로 원래 사용하도록 설정한. 이 문제를 제거하기 위해 위에서 설명한 해결 방법을 사용하십시오.

경우 "시작" 명령 사용하지 않고 명령줄에서 GUI 응용 프로그램 시작, 표준 OS 핸들을 올바르게, 0으로 있는 NOT 있지만 잘못 CMD.EXE에 에서 상속됩니다. 응용 프로그램의 CRT 초기화될 때, 낮은 세 개의 I/O 핸들 0, 1 및 2에서 CMD.EXE에 응용 프로그램에서 상속하는 세 핸들 번호를 사용하도록 초기화됩니다. AllocConsole() 응용 프로그램을 호출할 때 콘솔 초기화 루틴을 콘솔 초기화 잘못된 표준 OS 핸들을 값과 유효한 핸들 값 새 콘솔에서 것으로 믿고 바꿀 했습니다. 콘솔 초기화 루틴을 표준 OS 핸들 같은 세 가지 값을 알려주지 경향이 있으므로 coincidence에 의해 콘솔 initilization 표준 OS 핸들을 값을 전에--CMD.EXE에 에서 상속된 것과 있던 동일한 값으로 바뀝니다. 따라서 이 경우 CRT I/O 작동합니다.

이 버전의 Windows NT 또는 Windows 향후 작동할 수 있도록 CRT 루틴이 명령줄에서 실행할 GUI 응용 프로그램에서 사용할 수 있는 기능을 의도적으로 없음을 실현하는 데 중요합니다. 향후 버전에서 아니라 응용 프로그램의 "시작 < 응용 프로그램 이름 >", 명령줄에서 시작할 아니라 응용 프로그램 이름"명령줄에 시작된 응용 프로그램에 대한 해결 방법은 필요할 수 있습니다.

속성

기술 자료: 105305 - 마지막 검토: 2006년 11월 21일 화요일 - 수정: 4.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Win32 Application Programming Interface?을(를) 다음과 함께 사용했을 때
    • Microsoft Windows NT Advanced Server 3.1
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 서비스 팩 5
    • Microsoft Windows NT 4.0
    • Microsoft Windows 95
    • Microsoft Windows 98 Standard Edition
    • the operating system: Microsoft Windows 2000
    • Microsoft Windows Millennium Edition
    • the operating system: Microsoft Windows XP
키워드:?
kbmt kbconsole kbinfo kbkernbase KB105305 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com