C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[51527] Re:Re:Re:조금 불명확했나요..^^; 다시 정리하자면..
장성호 [nasilso] 1168 읽음    2007-12-07 19:10
하고자 하는것이 아래와 같은지요?

  1. 윈도우 프로그램이다.

  2. 탐색기에서 실행하면 그냥 윈도우 어플이 실행되고
 
  3. 커맨드라인에서 실행할때 (cmd.exe 에서 ) 옵션에 따라 윈도우 어플이 되기도하고
     실행한 cmd.exe의 console에 출력하는 콘솔 프로그램이 되게도 하고싶다


뭐 위와 같은 목적인가요?


1. 실제 프로그램은 윈도우로 만들어져 있다고 했죠?

2. cmd에서 바로 윈도우 프로그램을 실행하지 마시구요
   중간에 console프로그램을 두세요

3. console에서는 cmd.exe에서 실행할때 파라메터를 보고
  
   그냥 윈도우 프로그램이어야 한다면 Win어플을 그냥 실행하구요
  
   console이어야 한다면 childProcess로 윈어플을 띄우면서
   pipe를 만들어서 childprocess와 입출력을 주고 받아서
   standard in/output에 출력하면 됩니다.

  child process I/O 를 redirect하는 방법은  아래를 참조하세요
   http://blog.naver.com/lhyejung79?Redirect=Log&logNo=150002476680

  테스트 해봤습니다.

그럼..


 
      

이후승 님이 쓰신 글 :
: 답변에 감사드립니다..
:
: 그런데 그렇게 질문드린 의도는..
: 기존에 WinAppl 로 만들어진 툴에 해당 기능을 추가하고자 함이었습니다..
:
: 실행파일이 Test.exe 라면..
: 그냥 Command Line 에서 Text 를 입력하면 GUI 환경의 Win App 로 실행되겠지만..
: Text -Console 과 같이 실행하면 MainForm Visible = false 처리하고, 도스 플그램처럼 실행하려는 의도였습니다..
:
: 감사합니다..
:
:
:
:
: kylix 님이 쓰신 글 :
: : 휴...
: :
: : 벌써 몇번째 이야기 하지만... 콘솔어플리케이션으로 만드세요...
: :
: : 님께서 이야기 하는게 콘솔어플리케이션입니다. 콘솔어플리케이션과 일반어플리케이션의 차이는 콘솔창하나 더 띄워지는거 밖에 차이가 없습니다. 특히 도스 프롬프트에서 실행했을때 같이 콘솔을 공유한다는거...
: : 콘솔 어플리케이션도 얼마든지 윈도우창을 띄울 수 있습니다.
: :
: : 제가 C++안한지 오래되서 델파이로 설명하자면...
: :
: : 일반 어플리케이션 프로젝트 소스
: : program Project1;
: :
: : uses
: :   Forms,
: :   Unit1 in 'Unit1.pas' {Form1};
: :
: : {$R *.res}
: :
: : begin
: :   Application.Initialize;
: :   Application.CreateForm(TForm1, Form1);
: :   Application.Run;
: : end.
: :
: : 콘솔어플리케이션 프로젝트 소스 (윈도우창지원)
: :
: : program Project1;
: :
: : {$APPTYPE CONSOLE}
: :
: : uses
: :   Forms,
: :   Unit1 in 'Unit1.pas' {Form1};
: :
: : {$R *.res}
: :
: : begin
: :   Application.Initialize;
: :   Application.CreateForm(TForm1, Form1);
: :   Application.Run;
: : end.
: :
: : 위 소스에서 보시는 것처럼 차이점은 콘솔창을 띄우기 위해 컴파일러지시자로 {$APPTYPE CONSOLE}를 쓴것 밖에 없습니다. 빌더도 마찬가지일겁니다.
: :
: : 이후승 님이 쓰신 글 :
: : : 질문이 조금 불명확했던것 같습니다.
: : : 정리하자면..
: : :
: : : 1. 기본은 그래픽 환경의 윈Appl 입니다.  (Console App 아님.)
: : : 2. Console App 처럼 Command Line 에서 실행할 경우,  Console 에 원하는 텍스트가 출력됩니다..
: : : 3. 이때, 실행시킨 console 과 출력되는 console 은 동일합니다.
: : :     (AllocConsole 사용시, 별도의 console 창에 출력됨,)
: : :
: : :
: : : 이상입니다..
: : :
: : :
: : :
: : :
: : : kylix 님이 쓰신 글 :
: : : : 뭘 원하시는지 감을 못잡겠네요... 말이 이리저리 바뀌어서... 쩝~
: : : :
: : : : 처음 이야기 하신것처럼
: : : : : : : 콘솔의 command line 에서 직접 윈App를 실행한 다음에,
: : : : : : : 동일 콘솔에 텍스트가 출력되게 하려면 어떻게 해야 할까요..
: : : : 위 사항이라면 콘솔어플리케이션으로 만드시면 됩니다.
: : : : 도스 명령 프롬프트에서 만드신 프로그램 실행하면 원하시는 것처럼 됩니다.
: : : :
: : : : 콘솔어플리케이션이 아니라면 콘솔에 출력을 원하는때에 AllocConsole로 콘솔창을 만들어서 입출력을 하시면되구요...
: : : :
: : : : 해당기능이라는게 도대체 뭔지... 의문이네요...
: : : :
: : : : 이후승 님이 쓰신 글 :
: : : : : 처음부터 콘솔어플로 만드는것이아니고,
: : : : : 윈Appl로 만들어 해당기능을 구현코자 함입니다..
: : : : : 콘솔로 실행시 출력하는내용은 옵션이고.. 기본은 윈Appl 입니다..
: : : : :
: : : : :
: : : : :
: : : : : kylix 님이 쓰신 글 :
: : : : : : 그냥 빌더에서 콘솔어플리케이션으로 프로그램을 만들면 되는 것으로 알고 있습니다.
: : : : : :
: : : : : : 이후승 님이 쓰신 글 :
: : : : : : : 안녕하세요.. 밑에 글 본문에 질문한 사람입니다..
: : : : : : : 덧글이 매우 많이 달려서 좋긴한데.. 정작 제 질문에 아직 해결책을 못찾았네요..^^;;
: : : : : : :
: : : : : : : 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 처럼 같은창에서 출력해야합니다..
: : : : : : : : : : : : : :
: : : : : : : : : : : : : : 조언을 부탁드리겠습니다.

+ -

관련 글 리스트
51470 콘솔에 텍스트 출력문제... kylix 님 조언부탁드립니다. 이후승 1382 2007/12/04
51480     Re:콘솔에 텍스트 출력문제... kylix 님 조언부탁드립니다. kylix 1347 2007/12/05
51489         ^^;; Win App 에서 해당기능을 구현코자 합니다.. 이후승 1085 2007/12/05
51493             Re:^^;; Win App 에서 해당기능을 구현코자 합니다.. kylix 1262 2007/12/05
51520                 조금 불명확했나요..^^; 다시 정리하자면.. 이후승 1034 2007/12/07
51522                     Re:조금 불명확했나요..^^; 다시 정리하자면.. kylix 1078 2007/12/07
51524                         Re:Re:조금 불명확했나요..^^; 다시 정리하자면.. 이후승 894 2007/12/07
51527                             Re:Re:Re:조금 불명확했나요..^^; 다시 정리하자면.. 장성호 1168 2007/12/07
51532                                 답변감사합니다.. 이후승 1100 2007/12/08
51473     Re:콘솔에 텍스트 출력문제... kylix 님 조언부탁드립니다. 장성호 1726 2007/12/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.