첨부의 소스를 D2007에서 컴파일 한 후 실행하면 정상인데,
D2009에서 컴파일 후 실행하면 에러가 발생하는 이유가 뭘까요?
CreateProcess함수에서 에러가 발생하던데, D2009 컴파일러가 kernel32.dll 에서
함수를 임포트 하면서 오류가 발생하는 걸까요?
도움 부탁드립니다.
말씀하신 부분만 가지고는... 답변해드리기가 상당히 힘듭니다...
조금 더 자세한 상황을 설명해 주셔야 할거 같습니다.
D2009로 오면서 widestring이 기본이 되었습니다.
아래와 같이 바꾸면 잘 됩니다.
procedure ExecNewProcess(ProgramName : String; Wait: Boolean);
var
//StartInfo : TStartupInfo;
StartInfo : TStartupInfoA;
ProcInfo : TProcessInformation;
CreateOK : Boolean;
begin
{ fill with known state }
FillChar(StartInfo,SizeOf(TStartupInfo),#0);
FillChar(ProcInfo,SizeOf(TProcessInformation),#0);
StartInfo.cb := SizeOf(TStartupInfo);
// CreateOK := CreateProcess(nil, PChar(ProgramName), nil, nil,False,
// CREATE_NEW_PROCESS_GROUP+NORMAL_PRIORITY_CLASS,
// nil, nil, StartInfo, ProcInfo);
CreateOK := CreateProcessA(nil, PAnsiChar(AnsiString(ProgramName)), nil, nil,False,
CREATE_NEW_PROCESS_GROUP+NORMAL_PRIORITY_CLASS,
nil, nil, StartInfo, ProcInfo);
WaitForInputIdle(ProcInfo.hProcess, INFINITE);
{ check to see if successful }
if CreateOK then
begin
//may or may not be needed. Usually wait for child processes
if Wait then
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
end
else
begin
ShowMessage('Unable to run '+ProgramName);
end;
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
오 그렇군요.
덕분에 해결했습니다.
감사합니다.
아.. 첨부파일이 있었군요..ㅡㅡ; 몰랐네요.. ㅋ
제가 한가지를 깜박 했군요.
메인 메뉴에서 File -> Launch Notepad 를 클릭하면 에러가 발생합니다.