안녕하세요.. 밑에 글 본문에 질문한 사람입니다..
덧글이 매우 많이 달려서 좋긴한데.. 정작 제 질문에 아직 해결책을 못찾았네요..^^;;
AllocConsole() 을 사용하게 되면, 별도의 command window 가 생성되어서 출력되는데..
이러한 형태가 아니고, 콘솔의 command line 에서 직접 윈App를 실행한 다음에,
동일 콘솔에 텍스트가 출력되게 하려면 어떻게 해야 할까요.. 마치 일반 도스툴처럼 보여지게요..
핸들을 가져와서 standard output 으로 지정하려하는데 잘 되지 않습니다..
조언 부탁드립니다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
음... 쩝~
델파이만 쓰다 보니까.. 델파이에서는 바로 되어서, 당연히 될줄 알고 말씀드렸는데... ㅠㅠ
AllocConsole하면 CB/VC는 GetStdHandle에서 얻는 핸들로 printf에서 출력을 위해 사용하는 stdlib에있는 stdout이 바뀌지 않는다는군요...
아래와 같이 하시면 이후로 printf, cout, ... 등 콘솔에 출력하는 모든 함수들을 다 이용하실 수 있습니다.
AllocConsole();
HANDLE hAfter = GetStdHandle(STD_OUTPUT_HANDLE);
int crt = _open_osfhandle((int)hAfter, _O_TEXT );
FILE * fd = fdopen(crt, "w");
*stdout = *fd;
printf("wow");
장성호 님이 쓰신 글 :
: 감사합니다.
: 그런데 저는 그냥 printf 써서는 출력이 안되더군요
: 그래서 tip에 있는것을 보고 저렇게 만든것인데...
:
: 제가 무엇 잘못한것이라도 있나요?
: bcb6.0 으로 New Applicaion하고 아무것도 설정 건들지 않고
: 아래와 같이 코딩했을때 출력되지 않더라구요
:
: #include <stdio.h>
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: AllocConsole();
: printf("adfad");
: }
:
:
:
: kylix 님이 쓰신 글 :
: : printf가 표준출력에 출력을 하기 때문에 GetStdHandle로 표준출력의핸들구해서 WriteFile로 안쓰셔도 됩니다.
: : 그냥 printf쓰셔도 별 문제없이 됩니다.
: :
: : 장성호 님이 쓰신 글 :
: : : 팁 게시판에 있네요..
: : :
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=425
: : :
: : : AllocConsole 하고..
: : : 그냥 printf 하는게 아니었네요.. ㅋㅋ
: : : 그러니 printf는 아래와 같이 재정의 해서 쓰면 되겟네요
: : :
: : : void printf(char * szFormat, ...)
: : : {
: : : char szBuffer[4097];
: : : va_list args;
: : :
: : : va_start(args, szFormat);
: : : vsprintf(szBuffer, szFormat, args);
: : : va_end(args);
: : :
: : : HANDLE hOut;
: : : DWORD dwWrite;
: : : hOut = GetStdHandle( STD_OUTPUT_HANDLE );
: : : WriteFile(hOut,szBuffer,strlen(szBuffer),&dwWrite,NULL);
: : : }
: : :
: : :
: : : 한가지 배우네요
: : :
: : : 그럼..
: : :
: : :
: : :
: : : kylix 님이 쓰신 글 :
: : : : 그냥 일반 프로젝트로 하세요.
: : : :
: : : : AllocConsole함수로 콘솔창 하나띄우고, 파일에 입출력하듯이 표준출력(Out)에 출력하시면 됩니다.
: : : :
: : : : 쩡이 님이 쓰신 글 :
: : : : : 빌더에서 실행할 때, 폼을 먼저 닫으면 괜찮은데
: : : : : 콘솔창을 먼저 닫으면, CPU창과 함께 무시무시한 메세지를 보이면서 기절해버리네요..
: : : : :
: : : : : 필요시...
: : : : : #define CONSOLE_ONOFF 머..이런 식이라도..
: : : : : 사용하고 안하고 가능할까요?
: : : : : 잘안되네요.
: : : : :
: : : : :
: : : : :
: : : : : 장성호 님이 쓰신 글 :
: : : : : : 전에 비슷한 질문에 답변을 드린적이 있는데요....
: : : : : :
: : : : : : VS처럼 컴파일옵션을 변경해서 하는 방법은 모르겠구요
: : : : : :
: : : : : : 아래처럼 하면 됩니다 (쬐금 불편하지만..)
: : : : : :
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=51011
: : : : : :
: : : : : : 단지 디버깅을 위한것이라면 자료실에 있는 trace같은 것을 이용해도 좋을것 같습니다.
: : : : : :
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_res&no=343
: : : : : :
: : : : : : 그럼..
: : : : : :
: : : : : :
: : : : : : 이후승 님이 쓰신 글 :
: : : : : : : 안녕하세요..
: : : : : : :
: : : : : : : Windows Applicaiton 으로 작성된 툴에서,
: : : : : : : Standard Output (커맨드창) 으로 텍스트를 출력해야하는데.. 어떻게 해야할지 모르겠네요..
: : : : : : : System() 함수를 사용하면 단발성으로 커맨드를 내리고 종료되는데.
: : : : : : : 계속적으로 현재 툴의 진행상황을 일반 console application 처럼 같은창에서 출력해야합니다..
: : : : : : :
: : : : : : : 조언을 부탁드리겠습니다.