سؤال

من الممارسات الشائعة على الأقل التعامل مع BSTR الفارغة (مؤشر WCHAR * الخالي) كسلسلة فارغة وتصميم كافة التعليمات البرمجية التي تعالج BSTRs وفقًا لذلك.إجابات على هذا السؤال نقول الشيء نفسه.

أين تم توثيق هذه الممارسة؟هل هناك أي وثيقة رسمية تصف هذه الاتفاقية؟

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

المحلول

حسنا، الارتباط الواردة في الجواب المقبول على هذا السؤال هو لمقال من قبل اريك ليبرت، <وأ href = "http://blogs.msdn.com/ericlippert/archive/2003/09/12/52976. ASPX "يختلط =" نوفولو noreferrer "> اريك الدليل الكامل لBSTR الدلالة . في حين أنه سيكون بالتأكيد <م> لا أن تكون وثائق رسمية، ليبرت هو يعرف ذلك جيدا سلطة على COM (لا سيما في الساحة البرمجة).

ولكن، الوثائق الرسمية وهذا القول:

<اقتباس فقرة>   

وA BSTR مع عدم وجود عناصر البيانات هو إما BSTR فارغة أو BSTR NULL. يشير إلى BSTR فارغة في الوقت الحاضر، ولكن ذات طول صفري، قيمة البيانات. A NULL BSTR يشير إلى قيمة البيانات غير موجودة.

وهكذا، رسميا كلاهما BSTRs مع عدم وجود عناصر البيانات، ولكن مع دلالات مختلفة قليلا (على الرغم من وجود شيء أن نقول إن تلك الحالات 2 تحتاج إلى التعامل معها بشكل مختلف في التطبيق الخاص بك). في هذه الحالة، كنت بالتأكيد اتباع نصيحة ليبرت من معاملتهم مماثل. بالنسبة لي، والخبرة في العالم الحقيقي له مع العمل الفعلي كيف تطبيقات تحمل وزنا أكبر من جملة واحدة في وثيقة BSTR الرسمي.

نصائح أخرى

يقدم مايكل بور ما أعتقد أنه يجب أن يكون الإجابة المقبولة.من المؤسف أن الصفحة ل BSTR في MSDN لا يوثق هذه الممارسة.

بالإضافة إلى ذلك، يمكنك استنتاج هذا السلوك من هذه الصفحات في وثائق MSDN:

  • SysFreeString تقارير الصفحة أنه إذا bstr يكون null ترجع الوظيفة ببساطة.
  • SysStringLen تقارير الصفحة أن تمرير أ null ل bstr ترجع المعلمة صفرًا لطول السلسلة.
  • SysStringByteLen تشير الصفحة إلى نفس السلوك؛ null يعني طول صفر

لكن التوثيق غير كامل:

يعد التعامل مع BSTR الفارغة باعتبارها طبقات سلسلة فارغة ممارسة شائعة، ولكن الوثائق الفنية الموجودة في Microsoft تنص في الواقع على أن هناك يكون فرق بين هذين.

لأي مستند يشير إلى كل من [MS-DTYP] و [MS-OAUT] ، يجب اعتبار تحديد BSTR في سياق تمثيل الأسلاك كمرجع إلى نوع BSTR المرسل ، مع تحديد BSTR في سياق تمثيل الذاكرة كمرجع إلى نوع BSTR المقدم ([MS-DTYP] القسم 2.2.5).يعكس المصطلحات المستخدمة في BSTRs المقدمة ، ويتم تعريف BSTR NULL ، أو BSTR الناتجة الفارغة ، على أنه تمثيل الأسلاك لـ NULL المقدم BSTR ؛ويتم تعريف BSTR فارغة ، أو BSTR الفارغة التي يتم نقلها ، على أنها تمثيل الأسلاك لطول صفر مقدم BSTR. يمكّن الحفاظ على هذا التمييز في تمثيل الأسلاك العملاء والخوادم من التمييز بين NULL المقدمة من BSTRs و BSTRs ذات الطول الصفري ، وبالتالي ربط دلالات مختلفة محددة للتطبيق على هاتين القيمتين.

https://msdn.microsoft.com/en-us/library/cc237580.aspx

لذا فإن الأمر متروك للتطبيقات سواء كانت تتعامل مع كليهما على قدم المساواة أم لا.

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