دلفي والتعامل مع استثناء المشكلة مع العديد من معالجة الاستثناء كتل

StackOverflow https://stackoverflow.com/questions/2556883

سؤال

أنا باستخدام دلفي برو 6 على ويندوز XP مع FastMM 4.92 و جدي JVCL 3.0.أعطيت التعليمات البرمجية أدناه ، أواجه المشكلة التالية:فقط أول معالجة الاستثناء كتلة يحصل صالح المثيل من E.الكتل الأخرى المباراة بشكل صحيح مع فئة من الاستثناء تثار ، ولكن ه هو غير المعينة (النيل).

على سبيل المثال ، في ضوء النظام الحالي من معالجة الاستثناء كتل عندما رفع E1 كتلة E1 مباريات E هو صالح مثيل كائن.ومع ذلك ، إذا حاولت رفع E2, أن كتلة لا تتطابق ، ولكن ه هو غير المعينة (النيل).إذا لم نقل E2 اصطياد كتلة إلى أعلى طلب رفع E1, ثم عندما E1 كتلة مباريات E هو الآن غير المعينة.هذا الطلب إذا كنت رفع E2 E تعيينها بشكل صحيح عندما لم يكن عند E2 كتلة لم يكن أول كتلة في الطلب.ملاحظة حاولت هذه الحالة مع البدائي المشروع يتكون من واحد فقط دلفي شكل.

أفعل شيئا سخيفا حقا هنا أو هو شيء خاطئ ؟

شكرا روبرت

type
    E1 = class(EAbort)
    end;

    E2 = class(EAbort)
    end;


procedure TForm1.Button1Click(Sender: TObject);
begin
    try
        raise E1.Create('hello');
    except
        On E: E1 do
        begin
            OutputDebugString('E1');
        end;

        On E: E2 do
        begin
            OutputDebugString('E2');
        end;

        On E: Exception do
        begin
            OutputDebugString('E(all)');
        end;
    end; // try()
end;
هل كانت مفيدة؟

المحلول

إذا أنا الحق ، السلوك ترونه هو شهد عند تقييم هـ تحت المصحح (هذا أنا حصلت على سلوك مماثل اختبار هذا في BDS 2006 المصحح).

هذا هو رمز القرار علة في المصحح ولكن لا يبدو أن تؤثر على وقت التشغيل السلوك.

إذا كان تصحيح السلوك هو المهم ، ببساطة إعادة تسمية استثناء معالج المتغيرات بحيث المصحح ليس لديها أي (المحتملة) الغموض إلى حل:

On E1: E1 do
begin
    OutputDebugString('E1');
end;

On E2: E2 do
begin
    OutputDebugString('E2');
end;

On Ex: Exception do
begin
    OutputDebugString('E(all)');
end;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top