هل يحتاج المتصل إلى إطلاق سراح IShellBrowser * تم الحصول عليه عبر رسالة WM_GTISHELLBROWSER غير موثقة (WM_USER + 7)؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

أشار العديد من عدة إلى وجود رسالة غير موثقة تسترجع مؤشر واجهة IShellBrowser من مربع الحوار الشائع HWND لملف فتح وحفظ الحوار.

ولكن هناك معلومات متضاربة (أو لا توجد معلومات) حول ما إذا كان هذا المؤشر addref'd، أو إذا كان هذا هو مجرد العنوان الخام الذي تم إرجاعه، ولا ينبغي استدعاء أي إصدار () على ذلك؟

هل كانت مفيدة؟

المحلول

لا. قد تجد الرابط التالي مفيد: قواعد نموذج كائن المكون .

مقتطفات:

قواعد العد المرجعي

القاعدة 1: يجب استدعاء AddRef لكل نسخة جديدة من مؤشر واجهة، والإفراج عن كل تدمير مؤشر واجهة، باستثناء حيث تسمح القواعد اللاحقة صراحة بطريقة أخرى.

القواعد التالية تدعو غير المعصوصية المشتركة إلى القاعدة 1.

  • قاعدة 1A: معلمات داخل الوظائف. يجب على المتصل AddRef المعلمة الفعلية، لأنه سيتم إصداره بواسطة Callee عند تخزين القيمة الخارجية أعلى منه.
  • القاعدة 1 ب: جلب متغير عالمي. يجب أن تكون النسخة المحلية لمؤشر الواجهة المنفردة من نسخة موجودة من المؤشر في متغير عالمي يتم الرجوع إليها بشكل مستقل عد، لأن الوظائف المسماة قد تدمر النسخة في العالم، بينما لا تزال النسخة المحلية حية.
  • القاعدة 1C: مؤشرات جديدة توليفها من "الهواء الرقيق". يجب أن تقوم الوظيفة التي تواجه مؤشر واجهة باستخدام معارف داخلية خاصة، بدلا من الحصول عليها من بعض المصدر الآخر، يجب أن تقوم بإجراء AddRef الأولي على المؤشر المركب حديثا. تتضمن الأمثلة المهمة لمثل هذه الروتين إجراءات إنشاء مثيل، وتطبيقات Iunknown :: QueryInterface، وهلم جرا.
  • القاعدة 1D: إرجاع نسخة من مؤشر مخزن داخليا. بعد إرجاع المؤشر، ليس لدى Callee فكرة كيف تتعلق عمرها بوجود نسخة مخزنة داخليا للمؤشر. وبالتالي، يجب على Callee استدعاء AddRef على نسخ المؤشر قبل إرجاعه.

القاعدة 2: معرفة خاصة من جانب جزء من مدونة علاقات البدايات ونهايات عمر نسختين أو أكثر من مؤشر الواجهة يمكن أن تسمح بحذف أزواج addref / الافراج.

  • من وجهة نظر عميل COM، يعد العد المرجعي دائما مفهوم لكل واجهة. يجب ألا يفترض العملاء أبدا أن الكائن يستخدم نفس العد المرجعي لجميع الواجهات.
  • لا ينبغي الاعتماد على قيم إرجاع AddRef والإصدار، ويجب استخدامها فقط لأغراض تصحيح الأخطاء.
  • استقرار المؤشر؛ انظر التفاصيل في ملف تعليمات OLE ضمن "قواعد العد المرجعية،" القسم الفرعي "استقرار هذا المؤشر والحفاظ عليه ساري المفعول".

راجع المادة الفنية "الإدارية" الممتازة في المادة الفنية من قبل دوغلاس هودجز، والفصل 3 من داخل OLE، 2nd Edition، بواسطة Kraig Brockschmidt (مكتبة MSDN، كتب) لمزيد من المعلومات حول العد المرجعي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top