C++Builder쪽의 팁 게시판에 있는 내용입니다.
C++ 코드라 좀 보시기가 곤란하실 거 같아서 대충 델파이 코드로 바꿔봤습니다.
실행하는 도스 프로그램은 델파이7의 dcc32.exe 컴맨드라인 컴파일러입니다.
당근 직접 실행하실 프로그램의 패스로 바꿔주셔야 됩니다.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Button1Click(Sender: TObject);
private
NowClose: boolean;
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
NowClose := false;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
NowClose := true;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
start: TStartupInfo;
sec: TSecurityAttributes;
pinfo: TProcessInformation;
waitresult: Dword;
begin
FillChar(start, sizeof(STARTUPINFO), 0);
start.cb := sizeof(start);
start.wShowWindow := SW_SHOWDEFAULT;
sec.nLength := sizeof(sec);
sec.lpSecurityDescriptor := nil;
sec.bInheritHandle := true;
if CreateProcess('c:\borland\delphi7\bin\dcc32.exe', nil, @sec, @sec, true, 0, nil, nil, start, pinfo) <> true then
begin
ShowMessage(AnsiString('CreateProcess() failed: ') + IntToStr(GetLastError));
exit;
end;
repeat
Application.ProcessMessages;
if NowClose then exit;
waitresult := WaitForSingleObject(pinfo.hProcess, 100);
until waitresult <> WAIT_TIMEOUT;
if waitresult = WAIT_FAILED then
begin
ShowMessage('WaitForSingleObject() failed');
exit;
end;
CloseHandle(pinfo.hProcess);
ShowMessage('끝!');
end;
end.
방금 델파이 팁 게시판에도 올렸습니다.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=del_tip&no=51
초보빌더 님이 쓰신 글 :
: a.exe 라는 파일이 있고 이 파일은 특정파일을 읽어들여서 일정형식의 변환을 거치는 것입니다.
: 예를 들면 a.exe 1.dat > 1.txt 이런식으로 도스창에서 입력을 하면 1.dat가 변환되어 1.txt가 됩니다.
: 이 txt파일을 델파이에서 가공하여 보여주고 또 인쇄하는 것을 만들려고 하는데요.
: 1.dat파일의 용량이 항상 다르기때문에 이 명령이 종료될때까지는 델파이는 다른 작업을 못하게 해야하거던요.
: 어떻게 해야할까요..
:
: 답변부탁드릴께요
:
: