Search Results for 'Teeny Tools/Etc.'

24 POSTS

  1. 2006년 08월 21일 float형을 int로 빠르게 cast하는 방법 (3)
  2. 2006년 08월 07일 프로그래밍 관련 웹사이트
  3. 2006년 08월 02일 Using Visual C++ 2005 Express Edition with the Microsoft Platform SDK
  4. 2006년 07월 21일 기념일 계산 소스 (VC++.NET)
  5. 2006년 07월 18일 VC++ .NET에서 TRACE
  6. 2006년 07월 13일 C2220 에러에 관하여.. (7)
  7. 2006년 07월 12일 VC++ .NET 메시지 박스
  8. 2006년 07월 06일 방문자 카운터 php 소스
  9. 2006년 07월 06일 zero2rss 수정판
  10. 2006년 05월 17일 외부프로그램 실행과 관련있는 소스~ (2)

float형을 int로 빠르게 cast하는 방법

Posted 2006년 08월 21일 22시 55분, Filed under: Teeny Tools/Etc.
*(int *)&num (잘못된 소스라서.. 삭제~)

#ifdef __BIGENDIAN__
# define FTOI_LONG reserved, l
#else
# define FTOI_LONG l
#endif
#define USE_FTOI register union{ double r; struct { _integer4 FTOI_LONG; } l; } __ftoitmp;
#define OP_FTOI(val)\
( ( (__ftoitmp.r=(val)+((((65536.*65536.*16.)+(65536.*.5))*65536.)) ),\
    __ftoitmp.l.l-0x80000000L ) )

이렇게 해주면 (int) 로 하는 것보다 더 빠르다는군요.
안해봐서 모르겠습니다.
몰랐네...
(전에 올렸던 소스는 틀린 것으로 확인 되었습니다.)

여러번 반복적으로 쓰는 루틴의 경우는
if문 사용을 줄이거나 for문 사용을 줄이거나..
비트연산으로 바꿔주면.. 정말 꽤 효과가 있죠.
당연하겠지만서도..

출처: http://ezboard.new21.org/cgi-bin/ez2000/ezboard.cgi?db=lect/c&action=read&dbf=6&page=2&depth=1
(틀린내용)
출처: http://kldp.org/node/44000(새 창으로 열기)
이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback URL : http://php.chol.com/~perrkoo/tt/trackback/212

  1. # 수마 2006년 08월 26일 10시 42분 Delete Reply

    *(int*)# ==> 음 이거 이렇게 해주면 형변환 안일어나는거 아닌가요?
    num의 주소(float형 포인터)를 int형 포인터로 형변환 한후에 참조한다..라면..
    float형 data을 int방식으로 읽는 거일듯 한데... 그러면 저렇게 읽은 값은 이상한 값이 될듯..
    보통 저런 기법은 float 값등을 다른 형의 포인터로 함수에 넘기고 싶을때 사용하는듯 싶어요.

    <아래는 int가 아닌 DWORD형 포인터로 넘기는 예>
    ...
    float fDepthBias = 1.0f;
    d3dDevice->SetRenderState(D3DRS_DEPTHBIAS, (DWORD*)&fDepthBias);
    ...
    (아마 함수내부에서는 (float*)형으로 다시 형변환해서 값을 사용할 듯 합니다.)

  2. # BlogIcon perrkoo 2006년 08월 27일 17시 30분 Delete Reply

    수마 님// 맞습니다. float 형인 num이 저렇게 해서 한다고 형변환이 일어나지는 않겠죠. 끝에 있는 ";"가 그런 오해를 사게 한 것 같네요. 다른 함수에 넣거나 다른 변수에 넣거나 할 때 사용해야겠죠.(우선 ;는 지웠습니다)
    그리고 보시면.. float형의 변수 num의 주소의 값을 int형 포인터로 바꾸어서 다시 그 주소의 값으로 바꾸는 것이기때문에 다른 형의 포인터로 값을 넘기는 것은 아닌 듯 하네요.(즉, 최종값은 포인터가 아니라 숫자값이겠죠.)
    그리고 마지막 예는 왜 써주신 건지 좀 난감합니다. int형이 아니라 DWORD형으로 하면 괜찮다는 것을 말씀하시려는 것인지.. 문장 앞에 있는 "*"만 빼면 크게 달라보이지 않는 문장으로 보이는데요.
    아직 제대로 확인은 안해봤습니다만.. 저렇게 읽은 값은 이상한 값이 될 듯은 하네요. 확인 해보도록 하겠습니다.

  3. # BlogIcon perrkoo 2006년 08월 27일 18시 31분 Delete Reply

    수마 님// 확인해봤습니다. 수마님 말씀대로 값은 잘못된 값이 나옵니다.
    된다길래.. '저게 된단말야?'하면서 그냥 올린게 실수네요. 확인해보지도 않고 올린 점 사과드립니다.
    대신 새로운 소스를 올렸습니다. 분석해보시고 문제가 없는지 봐주시면 감사하겠습니다.
    역시 테스트는 안해봤습니다.

Leave a comment



프로그래밍 관련 웹사이트

Posted 2006년 08월 07일 18시 16분, Filed under: Teeny Tools/Etc.

C/C++

데브피아 - 거의 왠만한 C 관련 문제는 여기서 끝남.
http://www.devpia.com

WinAPI - 윈도우즈 API 프로그래밍 관련 강좌 및 예제
http://www.winapi.co.kr/

자료구조 관련 - 자료구조 관련하여 많은 예제들이 있습니다.
                     이걸 본 파코즌은 자료구조 숙제 다 끝났습니다...
http://my.netian.com/~kaskan/ds/ds_main.html



JAVA

자바스터디
http://www.javastudy.co.kr

자바누리
http://www.javanuri.com

JavaWorld (영문)
http://www.javaworld.com/

자바까페
http://www.javacafe.or.kr/

MobileJAVA
http://www.mobilejava.co.kr/

열린 자바랜드
http://www.javaland.co.kr/

J2ee STUDY
http://www.j2eestudy.co.kr/

JavaRanch (영문)
http://www.javaranch.com/



오픈소스

코드구루 (영문)
http://www.codeguru.com

코드 프로젝트 (영문)
http://www.codeproject.com

소스포지 (영문)
http://www.sourceforge.net
http://www.sf.net



웹프로그래밍 & 기타

비주얼베이직 공개 소스 - 원래는 가입하고 포인트 지불해야 이용가능한 사이트지만
                               게시물을 올리신 분은 공짜로 올려두셨습니다. 물론 회원가입도 필요없음...
http://www.personaldb.net/databank/data ··· sion%3Dy

SQLER - SQL 공부하는 곳입니다.
http://sqler.pe.kr

taeyo's ASP & .NET
http://www.taeyo.pe.kr/

하야시의 와글와글네 (ASP, 자바스크립트 등등)
http://www.waglwagl.net/

LeeChen과 함께 (다이렉트 X 프로그래밍)
http://www.leechen.net/

PHP school
http://www.phpschool.com/

<출처 : 파코즈(새 창으로 열기)>
이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback URL : http://php.chol.com/~perrkoo/tt/trackback/209

Leave a comment



Using Visual C++ 2005 Express Edition with the Microsoft Platform SDK

By Brian Johnson,
Microsoft Corporation

You can use Visual C++ Express to build powerful .NET Framework applications immediately after installation. In order to use Visual C++ Express to build Win32 applications, you'll need to take just a few more steps. I'll list the steps necessary for building Win32 applications using Visual C++ Express.

Step 1: Install Visual C++ Express.

If you haven't done so already, install Visual C++ Express.

Step 2: Install the Microsoft Platform SDK.

Install the Platform SDK over the Web from the Download Center. Follow the instructions and install the SDK for the x86 platform.

Step 3: Update the Visual C++ directories in the Projects and Solutions section in the Options dialog box.

Add the paths to the appropriate subsection:

Executable files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin

Include files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include

Library files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Lib

Note: Alternatively, you can update the Visual C++ Directories by modifying the VCProjectEngine.dll.express.config file located in the \vc\vcpackages subdirectory of the Visual C++ Express install location. Please make sure that you also delete the file "vccomponents.dat" located in the "%USERPROFILE%\Local Settings\Application Data\Microsoft\VCExpress\8.0" if it exists before restarting Visual C++ Express Edition.

Step 4: Update the corewin_express.vsprops file.

One more step is needed to make the Win32 template work in Visual C++ Express. You need to edit the corewin_express.vsprops file (found in C:\Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults) and

Change the string that reads:

AdditionalDependencies="kernel32.lib" to

AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib"

Step 5: Generate and build a Win32 application to test your paths.

In Visual C++ Express, the Win32 Windows Application type is disabled in the Win32 Application Wizard. To enable that type, you need to edit the file AppSettings.htm file located in the folder “%ProgramFiles%\Microsoft Visual Studio 8\VC\VCWizards\AppWiz\Generic\Application\html\1033\".

In a text editor comment out lines 441 - 444 by putting a // in front of them as shown here:

// WIN_APP.disabled = true;
// WIN_APP_LABEL.disabled = true;
// DLL_APP.disabled = true;
// DLL_APP_LABEL.disabled = true;

Save and close the file and open Visual C++ Express.

From the File menu, click New Project. In the New Project dialog box, expand the Visual C++ node in the Product Types tree and then click Win32. Click on the Win32 Console Application template and then give your project a name and click OK. In the Win32 Application Wizard dialog box, make sure that Windows application is selected as the Application type and the ATL is not selected. Click the Finish button to generate the project.

As a final step, test your project by clicking the Start button in the IDE or by pressing F5. Your Win32 application should build and run.

이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback URL : http://php.chol.com/~perrkoo/tt/trackback/208

Leave a comment



기념일 계산 소스 (VC++.NET)

Posted 2006년 07월 21일 23시 25분, Filed under: Teeny Tools/Etc.
기념일 계산 소스입니다.
예전에 MFC용(새 창으로 열기)(여기)으로 만든 적이 있었는데..
VC++.NET용으로 바꿔봤습니다.(비교해서 보시면 재미있을 듯)
역시 참고 할 곳이 별로 없어서
MSDN을 찾아보면서 맨땅에 헤딩했습니다.


// 입력된 날자부터 오늘까지의 총 날짜수
int CalcDayElapsed(int yearS, int monthS,int dayS, bool First)
{
DateTime StartDay;
StartDay = DateTime (yearS,monthS,dayS,0,0,0);

int yearN,monthN,dayN;
DateTime NowDay;
NowDay = DateTime::Today;
yearN = NowDay.Year;
monthN = NowDay.Month;
dayN = NowDay.Day;

Debug::WriteLine(String::Format("Today: {0}/{1}/{2}",yearN,monthN,dayN));

TimeSpan ElapsedDay = NowDay - StartDay;

int DayElapsed=0;

// First=> true 첫날을 하루로 침/ false: 다음날부터 계산
if (First==true)
DayElapsed=(int)ElapsedDay.TotalDays+1;
else
DayElapsed=(int)ElapsedDay.TotalDays;

return DayElapsed;
}


//입력된 날자로부터 몇 일 후는?
void CalcDayFrom(int yearS, int monthS, int dayS, bool First,
int Dayafter, int& yearT, int& monthT, int& dayT)
{
DateTime StartDay;
StartDay = DateTime (yearS,monthS,dayS,0,0,0);

TimeSpan ElapsedDay;

// First=> true 첫날을 하루로 침/ false: 다음날부터 계산
if (First==true)
ElapsedDay=TimeSpan(Dayafter-1,0,0,0);
else
ElapsedDay=TimeSpan(Dayafter,0,0,0);

DateTime TheDay;
TheDay=StartDay+ElapsedDay;

yearT = TheDay.Year;
monthT = TheDay.Month;
dayT = TheDay.Day;

return;

}


//실행부분(버튼클릭)
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

int yearS, monthS, dayS;
yearS=2006;
monthS=5;
dayS=13;


bool first=true;
int elapsed=CalcDayElapsed(yearS,monthS,dayS,first);

Debug::WriteLine(String::Format("Start: {0}/{1}/{2}",yearS,monthS,dayS));
Trace::WriteLine(String::Format("Elapsed : {0}",elapsed) );

int y,m,dd;
CalcDayFrom(yearS,monthS,dayS,first,elapsed,y,m,dd);
Debug::WriteLine(String::Format("The Day : {0}/{1}/{2}",y,m,dd) );

}
이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback URL : http://php.chol.com/~perrkoo/tt/trackback/203

Leave a comment



VC++ .NET에서 TRACE

Posted 2006년 07월 18일 22시 11분, Filed under: Teeny Tools/Etc.
MFC에서 저는 지겹도록(?) TRACE 매크로를 많이 씁니다.
디버그 모드에서 값을 체크할 때는... 개인적으로 '짱'이라고 생각합니다.
그런데..
.NET에서는 어떻게 해야하는지 해매였지요.
역시나 알면 쉽지만.. 모르면 저처럼 삽질을 해야지요.
비베의 Debug.Print랑 비슷한 모습을 보여주네요.
그리고 꽤 지적도 많은 CString을 안쓰는 대신에 쓰는 String 클래스.. 맘에 드네요.

   using namespace System::Diagnostics; //위에는 요놈을..

    //사용해야 할 곳에서.. Trace::를 쓰던가 Debug::를 쓰던가..
  Debug::WriteLine(yearS);
  Debug::WriteLine(String::Format("Start: {0}/{1}/{2}",yearS,monthS,dayS));
  Trace::WriteLine(String::Format("Elapsed : {0}",elapsed));
이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback URL : http://php.chol.com/~perrkoo/tt/trackback/199

Leave a comment



C2220 에러에 관하여..

Posted 2006년 07월 13일 21시 13분, Filed under: Teeny Tools/Etc.
MFC로 회사에서 프로그램을 짜다가 처음보는 에러를 만났습니다.

Compiler Error C2220 warning treated as error - no object file generated

이렇게 뜨더군요.
사실 warning treated as error 만 뭔소린가 파악해도 쉽게 알 수 있을지 모르지만.. -_-;;
처음보는 에러인지라..

국내 사이트를 꽤 찾아봐도 싱그러운 해답은 없더군요.
모 국내 개발자께서 C에서는 그냥 넘어갈 것인데 C++에서는 에러로 처리하는 것 같다고 하시더군요.
배열을 0으로 설정을 해서 그렇다고 하시는데.. 내 경우는 아닌 거 같구.

AutoCAD를 컨트롤 할 일이 있어서 ObjectARX를 사용하는 곳에
MFC로 이미 만든 프로그램에 있던 함수인지라 전혀 문제가 없다고 생각하고 가져다 발랐더만..
대략난감.

여튼 외국사이트에서 도움을 받았는데..
어처구니 없게도
"treat warnings as errors"라는 옵션을 꺼버리면 되더군요.
컴파일러 옵션에서는 "/WX"라는 옵션을 지우면되구요.

알고보면 간단하지만..
저처럼 헤매이실 다른 분을 위해 남깁니다.

<도움받은 사이트>
http://microsoft.ease.lsoft.com/scripts/wa-msn.exe?A2=ind0105c&L=mfc&P=367

http://msdn.microsoft.com/library/defau ··· 2220.asp(새 창으로 열기)
이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback URL : http://php.chol.com/~perrkoo/tt/trackback/197

  1. # 김현중 2006년 12월 18일 15시 38분 Delete Reply

    감사합니다..^^

  2. # BlogIcon perrkoo 2006년 12월 28일 10시 26분 Delete Reply

    별 말씀을요~ ^^

  3. # 김구진 2007년 09월 12일 17시 26분 Delete Reply

    감사합니다.. 이문제 때문에 한참을 고민하다가 이 글을보고 겨우 해결했네요..ㅠㅠ 다시 한번 감사드립니다!!ㅎ

  4. # BlogIcon perrkoo 2007년 09월 19일 23시 00분 Delete Reply

    아 그렇습니까? 다행이네요~ ^^

  5. # dalhee 2008년 04월 25일 13시 25분 Delete Reply

    오늘 libtorrent 를 빌드하다가...헤매이고 있었는데 큰 도움이 되었습니다.
    감사합니다.

  6. # BlogIcon perrkoo 2008년 04월 26일 21시 38분 Delete Reply

    도움이 되었다니.. 기분이 정말 좋습니다. ^^

  7. # BlogIcon June 2008년 10월 17일 16시 37분 Delete Reply

    하나라도 워링이나면 발생합니다.
    경고수준 낮추던지 옵션을 끄던지하는 방법도 있겠지만
    워링을 잡는게 더 좋은 방법일것 같아요 ^^;

Leave a comment



VC++ .NET 메시지 박스

Posted 2006년 07월 12일 00시 48분, Filed under: Teeny Tools/Etc.
VC++ 메시지박스를 많이 쓰지요.
그런데.. .net에서 어떻게 해야하는지 좀 해맸습니다.
알고보면 쉬운거지만..
.net을 전혀 모르던 저에게는 좀 깝깝했던 기억이 있네요.

MessageBox::Show("A","B", MessageBoxButtons::OKCancel,MessageBoxIcon::Asterisk);
이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback URL : http://php.chol.com/~perrkoo/tt/trackback/196

Leave a comment



방문자 카운터 php 소스

Posted 2006년 07월 06일 19시 42분, Filed under: Teeny Tools/Etc.
웹페이지 등에서 방문자 수를 카운트하는 소스
다른 분이 만드신건데.. 출처가.. 가물가물.. 우선 그냥 올립니다.
text파일을 이용하는 것과 mysql을 이용하는 소스 2종세트~


텍스트파일에 카운트 값을 저장하는 php
<count_txt.php>

<?
// <? <-- 이 표시 이전에 공백이나 어떤 HTML 이 들어가도 안됩니다.
//수동으로 count.txt 란 파일을 같은 디렉토리에 만들어놓는다.
// 물론 퍼미션은 777 (모든사람이 읽기 쓰기 접근이 가능하게..

$count = file( "count.txt"); //------------- ①
// file 함수는 count.txt 파일의 데이터를 배열로 저장합니다.
// 한줄 한줄 배열로 저장하기 때문에 $count[0]은 첫줄 $count[1] 둘째줄

$count = chop($count[0]); //------------ ②
// chop 함수는 문자열 끝의 의미없는 공백을 지워주는 함수입니다.
// 'abc ' 이와같이 데이터가 있을 경우 'abc' 로 뒤에 불필요한 공백을
//삭제 합니다.

if (!$ip){ //----------------------------- ③
// $ip는 쿠키로 지정된 값입니다.
// 즉, 한번 들어오면 쿠키값으로 인해 리프레쉬 하여도 카운터는 올라가지 않습니다

$count++; //------------------------- ④
// 쿠키값이 없을 경우 카운터를 1 증가 시킵니다.

$fp = fopen( "count.txt", "w"); // 파일 열고 ----- ⑤
fwrite($fp, "$count"); // 파일에다 $count 값을 저장합니다. ------⑥
fclose($fp); // 파일을 닫습니다. ----- ⑦

SetCookie( "ip",$REMOTE_ADDR); //----- ⑧
// 또는 SetCookie("ip",$REMOTE_ADDR,0,"/"); 처럼 하세요.
// 카운터가 추가 되었으므로 쿠키를 설정해 브라우저를 제거하기 이전에는
// 카운터가 더 이상 올라가지 않게 합니다.

} //---------- ⑨
echo ($count); //-------------- ⑩
// 카운트 값을 출력합니다.
?>



mysql에 카운트 값을 저장하는 php
<count_mysql.php>

<HTML>
<HEAD>
<TITLE>test</TITLE>
</HEAD>

<
?

$host = "localhost"; // 기본값 localhost
$usr_id = "id"; // 자신의 Mysql 아이디
$usr_pw = "pw"; // 자신의 Mysql 비밀번호
$usr_db = "db"; // 자신의 Mysql DB

//$connect = mysql_connect($host, $usr_id, $usr_pw); // Mysql 연결부분
//mysql_select_db($usr_db, $connect) or die("데이터베이스 연결 실패");

$connect = mysql_connect($host, $usr_id, $usr_pw) or die("SQL server에 연결할 수 없습니다.");
mysql_select_db($usr_db,$connect);


if (!$ip){

$que1 = "create table count (id int(4) not null primary key auto_increment, count int(11) default '0')"; // 테이블 만들기
mysql_query($que1, $connect);// or die("뭔가 문제가 있는데..");

$que2 = "insert into count values (1, 0)"; // 테이블 카운터 부분에 0 입력해주기
mysql_query($que2, $connect);

$que3 = "update count set count=count+1 where id=1"; // 방문때마다 카운터를 +1 해주기
mysql_query($que3, $connect);

SetCookie( "ip",$REMOTE_ADDR);

}

$que4 = "select * from count where id=1"; // 카운터 부분을 $count 로 함수설정
$result = mysql_query($que4, $connect);
$temp = mysql_fetch_array($result);
$count = $temp[count];

echo("$count"); // 카운터 출력


echo("
<p>
</BODY>
</HTML>");

?>
이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback URL : http://php.chol.com/~perrkoo/tt/trackback/195

Leave a comment



zero2rss 수정판

Posted 2006년 07월 06일 19시 09분, Filed under: Teeny Tools/Etc.

양주일님께서 만든 zero2rss를 그대로 사용했더니, 몇몇 RSS리더기(구글데스크바)에서 날짜가 제대로 읽히지 않아서 수정해봤습니다.
<dc:data>부분을 <pubDate>로 고치고 data(...)값을 gmdate(...)값으로 바꿨습니다.
(딱 한줄 수정 -_-;;)
"XXX" 부분은 알아서 수정해서 쓰세요.

밑에 있는 파일을 받으세요~




자세한 내용(사용법이나 기타 등등)은 여기(새 창으로 열기) 참조~

이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback URL : http://php.chol.com/~perrkoo/tt/trackback/194

Leave a comment



외부프로그램 실행과 관련있는 소스~

Posted 2006년 05월 17일 22시 58분, Filed under: Teeny Tools/Etc.
선배가 물어보길래..
찾아 본 소스..
아마 devpia에 있던 것을 제가 아주 조금 손 본 정도 입니다.

하나는 외부프로그램 실행시켜 놓고.. 끝날 때까지 기둘리는 간단한 소스
또 하나는 커맨드 창에서 나오는 내용을 스트링으로 받는 내용.
원래는 텍스트 파일 같은 것으로 저장하는 건데 그냥 CString으로 받는 것으로 수정.
원소스의 텍스트로 저장 부분은 그냥 주석처리 했습니다.
의외로 필요한 부분이 많을 소스...

  CString sCmd;
  sCmd="c:\\windows\\system32\\notepad.exe"; //실행할 프로그램 경로명
  char * cCmd = new char[sCmd.GetLength() + 1];
  strcpy(cCmd, sCmd);

  STARTUPINFO si;
  ZeroMemory(&si, sizeof(si));
  si.cb = sizeof(STARTUPINFO);
  si.dwFlags = STARTF_USESHOWWINDOW;
  si.wShowWindow = SW_SHOW;
  PROCESS_INFORMATION pi;
  ZeroMemory(&pi, sizeof(pi));

  BOOL bRet = CreateProcess(0, cCmd, NULL, NULL, TRUE, DETACHED_PROCESS, NULL, NULL, &si, &pi);
  WaitForSingleObject(pi.hProcess, INFINITE); //실행된 프로세스가 끝날때까지 기둘린다.
  AfxMessageBox("test"); //없어도 무방.. 그냥 확인할 겸..

  CloseHandle(pi.hProcess);
  CloseHandle(pi.hThread);

  cCmd = NULL;
  delete [] cCmd;


// 버퍼 사이즈 정의
#define BUFFER_SIZE 4096

void CTestprocessDlg::OnOk()
{
  STARTUPINFO si;
  PROCESS_INFORMATION pi;
  HANDLE hPipeRead, hPipeWrite;
  HANDLE hOutputFile;
  SECURITY_ATTRIBUTES sa;

  TCHAR szCmdLine[MAX_PATH];
  TCHAR szBuffer[BUFFER_SIZE + 1];
  DWORD dwBytesRead = 0, dwBytesWrite;
  DWORD dwExitCode = 0, dwAvail = 0, dwResult = 0;

  lstrcpy(szCmdLine, "c:\\windows\\system32\\cmd.exe /?"); //실행할 프로그램 경로...
  sa.nLength = sizeof(SECURITY_ATTRIBUTES);
  sa.bInheritHandle = TRUE;
  sa.lpSecurityDescriptor = NULL;

  // 파이프를 생성
  if(!CreatePipe( &hPipeRead, &hPipeWrite, &sa, 0))
  {
      AfxMessageBox("Error");
      return;
  }

  ZeroMemory( &pi, sizeof(pi) );
  ZeroMemory( &si, sizeof(si) );
  si.cb = sizeof(si);

  // 시작 플래그로 표준 입,출력 핸들 지정 및 윈도우 표시 방식을 설정한다.
  si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;

  // 프로세스의 출력을 파이프로 설정한다.
  si.hStdInput  = GetStdHandle(STD_INPUT_HANDLE);
  si.hStdOutput = hPipeWrite;
  si.hStdError = GetStdHandle(STD_ERROR_HANDLE);

  // 윈도우는 숨겨서 시작하게 한다.
  si.wShowWindow = SW_HIDE;

//파일 출력 안할란다.
/*
  // 출력 파일을 생성한다.
  hOutputFile = CreateFile("C:\\report.txt",
                      GENERIC_WRITE,
                      0,
                      NULL,
                      CREATE_ALWAYS,
                      FILE_ATTRIBUTE_NORMAL,
                      NULL);
  if(hOutputFile == INVALID_HANDLE_VALUE)
  {
      AfxMessageBox("Failed to create file.");
      return;
  }
*/

  // 프로세스를 실행한다.
  if(!CreateProcess(NULL, szCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi))
  {
      AfxMessageBox("Failed to execute CreateProcess().");
      return;
  }

  // 프로세스가 살아있는 동안만 파이프의 내용을 출력파일로 쓴다.
  while(dwExitCode == 0)
  {
      // 프로세스가 종료하기를 기다린다.
      dwResult = WaitForSingleObject(pi.hProcess, 500);
      // 파이프에 내요이 있는지 확인한다.
      if(PeekNamedPipe(hPipeRead, NULL, 0, NULL, &dwAvail, NULL))
      {
          if(dwAvail > 0)
          {
              // 파이프의 내용을 버퍼 만큼 읽는다.
              ReadFile(hPipeRead, &szBuffer, BUFFER_SIZE, &dwBytesRead, NULL);
              // 출력 파일에 파이프에서 읽은 데이터를 쓴다.
  //         WriteFile(hOutputFile, szBuffer, dwBytesRead, &dwBytesWrite, NULL);
  // 파일출력 안하고 화면상에 메시지 박스로 보기
  unsigned char temp[BUFFER_SIZE];
  memcpy(temp,szBuffer,BUFFER_SIZE);
  AfxMessageBox((LPCTSTR)temp);
          }
      }
      // Time Out이 걸린 것이 아니면 파이프 읽기를 종료한다.
      if(dwResult != WAIT_TIMEOUT)
          dwExitCode = 1;
  }

  // 출력파일 안 만든다..
  // 출력파일을 닫는다.
/*
  if(hOutputFile != INVALID_HANDLE_VALUE)
      CloseHandle(hOutputFile);
*/

  // 프로세스 종료코드를 얻는다.
  GetExitCodeProcess(pi.hProcess, &dwExitCode);
  // 프로세스 핸들을 닫는다.
  CloseHandle( pi.hProcess );
  CloseHandle( pi.hThread );

}
이올린에 북마크하기(0) 이올린에 추천하기(0)

Trackback URL : http://php.chol.com/~perrkoo/tt/trackback/185

  1. # BlogIcon Wiziple 2006년 05월 25일 09시 07분 Delete Reply

    안녕하세요. 댓글보고 링크타고 왔습니다.^^
    방명록에 남기려고 했는데... 확인이 늦으실 거 같아서 정겨운 C++ 소스 댓글에-_-;;;;;;;;;;
    저도 회사에서 MFC만 하는데;;;;
    개발자 블로그는 즐겨찾기 추가해놓아서... 자주 들릴께요^^;

  2. # BlogIcon perrkoo 2006년 05월 25일 15시 59분 Delete Reply

    앗.. 감사합니다. 별볼일 없는 사이트라서리..
    심심하실 때 놀러오셔요~

Leave a comment




Calendar

«   2010년 03월   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Recent Posts

  1. 하지만.. 후회는...
  2. 버려야 할 나쁜 습관 #2
  3. 버려야 할 나쁜 습관 #1
  4. 산세베리아
  5. 신파극

Recent Comments

  1. 언녕허세요? 23456 2009년
  2. 하나라도 워링이나면 발생합니다. 경고.. June 2008년
  3. 아... 아직 사용하시는 분이 계셨군요... perrkoo 2008년
  4. 저는 아직도 쓰고 있습니다. 혹시 업글.. Text2J사용자 2008년
  5. -_-;; 뭐라노? 씰데없는 코멘트구마이 perrkoo 2008년

Recent Trackbacks

  1. ExacTime 0.9 Beta 공개!!! 벽에게 말걸기 2006년
  2. ExacTime 이것은 뭐냐? 벽에게 말걸기 2006년
  3. 블로그 방문자 통합 10만명 돌파 기념!! Multimedia 評 2006년
  4. TEXT2JPEG4PSP v0.76 SE (Special Edition) 벽에게 말걸기 2006년
  5. TEXT2JPEG4PSP v0.76 벽에게 말걸기 2006년

Bookmarks

  1. Everyone and Everything
  2. ExacTime Q/A 게시판
  3. Multimedia 評
  4. Rhino's Cool Talk
  5. ShuTime Homepage
  6. TEXT2JPEG4PSP Q/A 게시판
  7. ▒ 제닉스의 사고뭉치 ▒

Site Stats

TOTAL 120193 HIT
TODAY 38 HIT
YESTERDAY 39 HIT
Creative Commons License

이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.