अद्यतन: यह D2007 के लिए विशिष्ट हो रहा है। यह डी 2010 में काम करता है जैसे यह पुराने संस्करण में काम करता है।डी 2007 के साथ अपवाद ब्लॉक से हल्ट (एन) के साथ एक त्रुटि कोड कैसे वापस करें?
मैं अपवाद के प्रकार की तरह Eception हैंडलर ब्लॉक में पकड़ा के आधार पर एक निकास कोड नहीं लौटाना चाहते हैं:
program test;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
Exitcode: Integer;
begin
Writeln('Enter error code:');
Readln(Exitcode);
try
raise EExternal.Create('sdsdkfjh');
except
on E:EExternal do
begin
Writeln(E.Classname, ': ', E.Message);
Halt(Exitcode);
end;
end;
end.
दुर्भाग्य D2007 में, हॉल्ट (एन) एक अपवाद ब्लॉक से फोन कर रहा हमेशा रिटर्न एक एक्जिट कोड 1, इससे कोई फर्क नहीं पड़ता कि आप हल्ट() से क्या गुजरते हैं।
जाहिर है क्योंकि अपवाद संचालक से बाहर निकलने अंतिम रूप है, जो लंबित (गैर बीच में बंद करें) अपवाद को साफ करता है कहता है, SysUtils.ExceptHandler बुला:
procedure ExceptHandler(ExceptObject: TObject; ExceptAddr: Pointer); far;
begin
ShowException(ExceptObject, ExceptAddr);
Halt(1); // <= @#$##@#$!
end;
और कोई बात नहीं क्या बाहर निकलने के कोड मैं चाहता था मुझे लगता है कि Halt(1)
प्राप्त करें!
तो सवाल यह है:
कैसे मैं बस निर्भर करता है जो अपवाद पर उठाया गया था वांछित बाहर निकलें कोड लौट सकते हैं?
माइक है, जो सच है के द्वारा नीचे टिप्पणी के आधार पर, यह वास्तव में सही ERRORCODE वापसी करता है। मुझे संदेह है कि यह वह तरीका है जिसका उपयोग आप त्रुटि कोड प्राप्त करने के लिए करते हैं जो संभवतः काम नहीं कर सकता है। – zz1433
@Aldo। नहीं, यह डी 2007 है। वही सटीक चीज डी 2007 और डी 2010 के साथ अलग-अलग व्यवहार करती है, जहां माइक द्वारा अपेक्षित और रिपोर्ट की गई है। –
कृपया क्यूसी (http://qc.embarcadero.com/) में एक बड़ी रिपोर्ट दर्ज करें; यद्यपि शायद डी2007 अपग्रेड नहीं होगा, यह देखने में सक्षम होना अच्छा है कि कौन सी बग 'ज्ञात' हैं। –