Monday 29 January 2018

مثال جيترفوريكسسيبتيون


مثال جيترفوريكسيبتيون
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
استدعاء Marshal. GetHRForException في بيئة ثقة جزئية (سيكوريتيبرميسيون)
لدي بعض رمز إو الذي يقرأ تيار داخل محاولة ..catch. فإنه يمسك إوكسيبتيون ويدعو System. Runtime. InteropServices. Marshal. GetHRForException () داخل الصيد، في محاولة لاتخاذ إجراءات مختلفة استنادا إلى هريسولت. شيء من هذا القبيل:
ولكن تشغيل هذا الرمز داخل أسب مع تروست = "مديوم"، أحصل على هذا الاستثناء:
سؤالان:
وأعتقد أن الاستثناء يحدث لأن جيثرفوريكسيبتيون يدعو إلى رمز غير مدار، والذي لا يسمح في الثقة المتوسطة. صيح؟ يتم طرح هذا الاستثناء، وليس في وقت تنفيذ جيثرفوريكسيبتيون، ولكن في الوقت الذي يجري JIT'ed الأسلوب - صحيح؟ (ستاكتريس يظهر طريقة بلدي، ولكن أنا 99٪ على يقين من أن استثناء إو لم يحدث) إذا كان الأمر كذلك، هل هناك طريقة بالنسبة لي لتغيير السلوك في بيئة الثقة الجزئية، حتى أنني لا استدعاء جيثرفوريكسيبتيون ( رمز غير مدار) حيث لا يسمح به؟ وبعبارة أخرى، كيف يمكنني السماح جيت النجاح في وقت تجميع، في حين أيضا تقييم وقت التشغيل ما إذا كان يجب استدعاء الرمز جيثرفوريكسيبتيون ()؟ شيء من هذا القبيل:
أعتقد أن هناك آلية وقت التشغيل لاختبار إذا الأذونات المتاحة، ولكن لم تكن قادرة على العثور عليه.

مثال جيترفوريكسيبتيون
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
الحصول على إكسيتكود من معالج استثناء.
لدي معالج الخطأ التالي في تطبيق وحدة التحكم الخاصة بي.
والمشكلة هي أن يتم تسجيل الخطأ ولكن بعد فشل هذا التطبيق والنوافذ المنبثقة (تطبيق لا يستجيب) وأظهرت.
لذلك أريد إضافة بيئة. إيكسيت () لمنع هذا السلوك، ولكن كيفية تحديد إكسيتكود من الاستثناء؟ أنا لا أريد أن تعيين خروج (0) (وهو ما يعني كل شيء على ما يرام) لأنني أريد أيضا رؤية الخطأ (المعلومات فقط أن حدث خطأ ما، يتم تسجيل استثناء بالفعل) في تطبيق جدولة التي تؤدي هذا البرنامج النصي.
يمكنك استخدام Exception. HResult؟
النظر في التعليمات البرمجية التالية:
ثم تنفيذ هذا من ملف دفعي مرتين - مرة واحدة مع المعلمة / t والآخر دون:
في أول تشغيل قمت بإنهاء مع 0. لقد جعلت العودة الرئيسية إنت والعودة فقط 0 لتنفيذ ناجحة - يمكنك أن تفعل environment. Exit (0) هنا.
مع المدى الثاني الذي يلقي أبليكاتيونكسيبتيون، يتم التعامل مع أونهاندلدكسيبتيون ثم يسمى environment. Exit (ex. resesult).
وأعتقد أن هريسولت مرتبطة في استثناءات محددة حسب مسن. ومع ذلك، قد ترغب رموز خروج مختلفة اعتمادا على ما تسبب الاستثناء. في هذه الحالة يمكنك رمي استثناءات مخصصة ثم يكون بعض المنطق كافوفلد في معالج أونهاندلدكسيبتيون:
ولكن هل تهتم حقا لماذا فشلت في وحدة التحكم؟ إذا حصلت على استثناء غير معالج ثم فشلت. هل يمكن أن يكون الكثير من نقاط الفشل المحتملة. ماذا ستفعل حقا مع رمز الخطأ؟ لقد سجلت الاستثناء من. وهذا يوفر المعلومات الحيوية.
معظم المبرمجين ببساطة استخدام environment. Exit (1). تقريبا يعمل دائما على ما يرام. ولكن هذا ليس صحيحا من الناحية الفنية، إذا كان برنامج يموت على استثناء ثم رمز الخروج هو عادة نفس رمز الخطأ استثناء الأساسي. يجب على معالج الحدث أن لا يغير هذا السلوك.
القيام بذلك الحق هو الفم:
هناك عامل فود هنا، لا يمكنك الوثوق تماما مكتبة مع كائنات استثناء مخصص التي لا تعيين رمز خطأ. لا يزال حسنا، تراجع هو E_FAIL.

الحصول على قيمة هريسولت الاستثناءات في 4 أو قبل ذلك.
أريد أن اعتراض استثناء (ميكروسوفت) صريح وقمع رسالة التحذير الافتراضية حتى الطريقة الواضحة هي:
ولكن هذا لن تجميع في التطبيق 4 استنادا إلى حماية e. HResult.
فاسيبوك تويتر لينكيدين إكسيرتس-إكسهانج / كيستيونس / 28620045 / جيتينغ-ذي-إكسيبتيونس-هريسولت-فالو-إن-نيت-4-أور-early. html كوبي.
لطرح الأسئلة وإيجاد الحلول.
أندياينسكو (8 تعليقات)
قادة الصناعة: نحن نريد رأيك!
نحن نقدر ملاحظاتك.
اليتي برودة، والأمازون إغيفت بطاقة، وفيلم إغيفت بطاقة!
ينتج الإخراج التالي - - aige-
عملت System. Runtime. InteropServ ices. Marsh al. GetHRFo ريكسيبتيون دون مشاكل. لذلك يتم الإجابة على سؤالي مع ذلك. سأتركه مفتوحا لفترة قصيرة في حين أن بوب يرغب في الرد على ---
فار بروبيرتي = ex. GetType (). جيتبروبيرتي (& كوت؛ هريسولت & كوت ؛، BindingFlags. NonPublic | BindingFlags. Instance)؛
هل تريد المزيد من المعلومات / للنظر في مزيد من ذلك (من الاهتمام الأكاديمي)؟
أنتج الإخراج التالي - P. S - عذرا، لا يمكن أن تقاوم رمي في قليلا من لينق. ؛)
لا تزال الملكية على أنها خالية.
مع نقطة توقف على قيمة فار. خط الخاصية فار لاغية لكلا قيمة و i هو أن هريسولت وضعت في الاستثناء.
ينتج الناتج التالي (بغض النظر عن استخدام الإطار 3.5 أو 4): - saige-
على العكس من ذلك باستخدام 3.5، تلقي هذا الإخراج لخصائص استثناء دون بيندينغفلاج العامة: وهذا الإخراج مع بيندينغفلاغ العامة:
تغيير الأعلام لتشمل خصائص عامة ثم يعمل رمز من بوب مع 4.
ومع ذلك فإن هريسولت لا يزال غير متوفر بسبب مستوى الحماية في 4 - أي لا تزال محمية (كما تنص على وثائق).
الكاتب إغلاق التعليق.
لأي شخص يقرأ هذه الملاحظة تعليقي النهائي النهائي.
مشاركة مميزة.
احصل على مفتاح نفر مجانا ل فيام أفايلابيليتي سويت 9.5.
فيام هو سعيد لتقديم رخصة نفر مجانية (1 سنة، 2 مآخذ) لجميع الإيجابيات تكنولوجيا المعلومات المعتمدة. يسمح الترخيص للاستخدام غير الإنتاجي من فيام أفايلابيليتي سويت v9.5 في المختبر المنزلي الخاص بك، دون أي قيود الميزة. وهو يعمل على حد سواء فموير و هايبر-V بيئات.
إذا كنت تواجه مشكلة مشابهة، فيرجى طرح سؤال ذي صلة.
إدارة الوثائق الطابعات والماسحات الضوئية وثيقة التصوير البرمجيات - صور وصور أخرى أدوبي أكروبات، صور / برامج الرسومات، الأمن، * المسح الضوئي، * بدف.
الدورات المقترحة.
680 أعضاء طرح الأسئلة وتلقى حلول شخصية في 7 أيام الماضية.
الانضمام إلى المجتمع من 500،000 المهنيين التكنولوجيا وطرح أسئلتك.
تتمتع إجابتك؟
الانضمام إلى مجتمعنا لمزيد من الحلول أو لطرح الأسئلة.

يي زانغ 's مدونة مسن يي تشانغ & # 039؛ s مسن مدونة.
كل شيء عن كلر & # 8211؛ إنتيروب / وينرت / وغيرها من الاشياء العشوائية.
Marshal. GetHRForException لا أكثر من مجرد الحصول على هر-فور-إكسبتيون.
لنبدأ أولا بالنظر إلى مقتطف شفرة صغير:
هذا يبدو على ما يرام تماما، أليس كذلك؟ ليس صحيحا. اتضح أن هذا أبي هو في الواقع سيئة اسمه، وأنه في الواقع لا أكثر من مجرد استرداد الموارد البشرية من كائن الاستثناء. استخدام هذا أبي بشكل غير صحيح يمكن أن تعطيك بعض المشاكل الغريبة، مثل رمي استثناء غير صحيح القديمة.
فماذا تفعل أبي فعلا؟
إلى جانب إعادة لك هريسولت، هذه الوظيفة أيضا تعيين كائن إيرورينفو الموضوع الحالي ليكون كائن استثناء. يحتوي كل مؤشر ترابط كائن إير إيرينفو كوم أسيساتد، مع التخلف إلى نول. يمثل هذا الكائن إرورينفو الفشل من آخر دعوة أبي كوم، وهو نوع من مثل أبي Win32 جيتلاستيرور () أبي، أو إرنو C أبي. من كائن إيرورينفو، يمكنك الحصول على مزيد من المعلومات مثل وصف الخطأ، سياق ملف التعليمات، الخ، التي تعطيك المزيد من المعلومات حول الخطأ. عن طريق تعيين كائن إرورينفو إلى كائن الاستثناء (في الواقع الإعداد إلى تنفيذ إرورينفو كائن الاستثناء، الذي تتم مشاركته من قبل كافة الكائنات المدارة)، فإنك تقول أساسا المتصلين كوم الخاص بك، & كوت؛ مهلا، هناك فشل، هذا الكائن استثناء ، وعليك أن تفعل شيئا حيال ذلك & كوت ؛، الذي هو واضح فكرة سيئة إذا كنت تريد فقط لاسترداد الموارد البشرية.
في كثير من الحالات، وهذا يمكن أن تذهب دون أن يلاحظها أحد، إذا كان لديك كوم المتصل / كالي مقابض إيرورينفو بشكل صحيح. بواسطة & كوت؛ بشكل صحيح & كوت ؛، أعني أنها تتبع بروتوكول كوم إيرورينفو، والتي هي في الأساس:
1. استخدام المتصل إرورينفو من مؤشر الترابط الحالي عند استدعاء واجهة كوم التي تقول إكسليلي & كوت؛ أنا دعم إيرورينفو & كوت؛
2. المستدعي (الذي ينفذ واجهة كوم) التي تقول & كوت؛ أنا دعم إيرورينفو & كوت ؛، يجب مسح / تعيين إيرورينفو قبل عودته. هذا هو مشابه جدا ل جيتلاستيرور () / إرنو، أليس كذلك؟
إذا كان هذا هو الحال، تعيين إورورينفو بشكل غير صحيح في مؤشر الترابط، وعادة ما إما الكتابة / مسح من قبل بعض تنفيذ الواجهة التي تدعم إرورينفو، أو تجاهلها.
ومع ذلك، لأن البروتوكول الذي وصفته هو في الواقع ليست مفهومة بشكل جيد جدا من قبل كل مطور كوم، لقد رأيت في كثير من الأحيان الحالات حيث مكون كوم أقول فقط & كوت؛ بالتأكيد، أنا دعم إيرورينفو على كل واجهة كوم & كوت ؛، وأنها لا تعيين / واضح إيرورينفو على الإطلاق. وبعد ذلك، المتصل من هذه واجهة كوم سيئة مزعجة، في نهاية المطاف باستخدام إيرورينفو التي حددتها دعوة جيثرفوريكسيبتيون في وقت سابق، ويؤدي إلى الاعتقاد بأن هناك خطأ. على سبيل المثال، لننظر في السيناريو التالي:

Marshal. GetHRForException () ترجع دائما 0 على الأنظمة الأساسية غير ويندوز # 11144.
أكوبلينجر علق أغسطس 25، 2018 & # 8226؛
استخدم برنامج الأمثلة هذا:
عند تشغيل على ويندوز، فإنه يطبع "القيمة: 123456". على أوسك / لينكس يطبع "القيمة: 0".
0 يبدو وكأنه قيمة العودة خاطئة هنا لأنها تشير إلى النجاح. يعود مونو حاليا -1 على الأنظمة الأساسية التي لا تدعم كوم إنتيروب، ولكننا نناقش ما يجب فعله على سبيل المثال. دائرة الرقابة الداخلية منذ نحن بحاجة إلى إضافة هذا الأسلوب هناك لامتثال ستانداردارد: bugzilla. xamarin / show_bug. cgi؟ إد = 43646.
المشكلة هي أن بعض التعليمات البرمجية مثل سيريلوغ يستخدم هذا الأسلوب (انظر زامارين المنتدى آخر و جيثب) حتى رمي بلاتفورمنوتسوبورتيدكسيبتيون (التي أضفناها لجميع هذه أبي مارشال الآن على دائرة الرقابة الداخلية) لن تجعل هذا العمل رمز إما وهذا هو السبب في أنني ' م التفكير حول مجرد تغييره إلى -1 كذلك هناك. ولكن من الناحية المثالية سنكون متسقين مع كور :)
أي سبب لرجوع 0 بدلا من -1 أو بعض رموز الخطأ العامة الأخرى؟
ستيفنتوب علق أغسطس 25، 2018 & # 8226؛
أكوبلينجر علق أغسطس 25، 2018.
ghuntleygraemechristie في ^^. لا أعتقد أن سيريلوغ ينبغي الاعتماد على هذا أبي على منصات غير ويندوز كما يفعل حاليا، انها الحظ النقي أنه يعمل كما هو.
جكوتاس علق أغسطس 25، 2018 & # 8226؛
إستثناء لديه هريسولت الملكية. يجب على Marshal. GetHRForException العودة فقط على منصات غير ويندوز. هو ما (عادة) يعود على ويندوز.
لاحظ أن Marshal. GetHRForException على ويندوز أيضا الإعداد كوم معلومات مؤشر الترابط المحلي المحلي، بحيث كوم يمكن الحصول على تفاصيل حول الاستثناء مرة واحدة يتم إرجاع هريسولت إليه. المارشال. ومن المفترض أن يتم استدعاؤها قبل عودة هريسولت إلى كوم. لدى مسن المزيد من التفاصيل حول هذا الموضوع.
وأضاف جكوتاس ارتكاب ل جكوتاس / كوريكلر أن المشار إليها هذه المسألة أغسطس 25، 2018.
جعل جيثرفوريكسيبتيون لإرجاع e. HResult على منصات غير ويندوز # 6929.
وأضاف جكوتاس التزام ل جكوتاس / كورفكس التي أشير إلى هذه المسألة 25 أغسطس 2018.
أضف اختبارا ل Marshal. GetHRForException # 11168.
أضاف جكوتاس التزام إلى دوتنيت / كوريكلر التي أشارت هذه المسألة 26 أغسطس 2018.
أضاف جكوتاس التزام ل جكوتاس / كورفكس التي أشير إلى هذه المسألة 26 أغسطس 2018.
غنتلي علق أغسطس 26، 2018 & # 8226؛
يا إله جيد. تستهلك مكتبة تسجيل، في نهاية المطاف اكتشاف مشكلة تنفيذ بكل في أحادية / كورفكس ل System. Runtime. InteropServices / مسكورليب. شكرا لتحديد هذاjkotas، @ ماريك-صفر /akoeplinger.
لا تعتمد على هريسولتس لاكتشاف ملفات الإشارات المرجعية المغلقة رقم 33.
وأضاف جكوتاس ارتكاب أن المشار إليها هذه المسألة 30 أغسطس 2018.
&نسخ؛ 2017 جيثب، Inc. شروط الخصوصية تعليمات حالة الأمان.
لا يمكنك تنفيذ هذا الإجراء في الوقت الحالي.
لقد سجلت الدخول باستخدام علامة تبويب أو نافذة أخرى. أعد التحميل لتحديث الجلسة. لقد سجلت الخروج في علامة تبويب أو نافذة أخرى. أعد التحميل لتحديث الجلسة.

No comments:

Post a Comment