أين يتم توثيق استخدام BSTR الفارغة؟
-
06-07-2019 - |
سؤال
من الممارسات الشائعة على الأقل التعامل مع 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 يشير إلى قيمة البيانات غير موجودة.
اقتباس فقرة> وهكذا، رسميا كلاهما BSTR
s مع عدم وجود عناصر البيانات، ولكن مع دلالات مختلفة قليلا (على الرغم من وجود شيء أن نقول إن تلك الحالات 2 تحتاج إلى التعامل معها بشكل مختلف في التطبيق الخاص بك). في هذه الحالة، كنت بالتأكيد اتباع نصيحة ليبرت من معاملتهم مماثل. بالنسبة لي، والخبرة في العالم الحقيقي له مع العمل الفعلي كيف تطبيقات تحمل وزنا أكبر من جملة واحدة في وثيقة BSTR الرسمي.
نصائح أخرى
يقدم مايكل بور ما أعتقد أنه يجب أن يكون الإجابة المقبولة.من المؤسف أن الصفحة ل BSTR
في MSDN لا يوثق هذه الممارسة.
بالإضافة إلى ذلك، يمكنك استنتاج هذا السلوك من هذه الصفحات في وثائق MSDN:
SysFreeString
تقارير الصفحة أنه إذاbstr
يكونnull
ترجع الوظيفة ببساطة.SysStringLen
تقارير الصفحة أن تمرير أnull
لbstr
ترجع المعلمة صفرًا لطول السلسلة.SysStringByteLen
تشير الصفحة إلى نفس السلوك؛null
يعني طول صفر
لكن التوثيق غير كامل:
SysReAllocString
لا يذكر ماذا سيحدث إذا*pbstr
يكونnull
.SysReAllocStringLen
لا يذكر ماذا سيحدث إذا*pbstr
يكون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
لذا فإن الأمر متروك للتطبيقات سواء كانت تتعامل مع كليهما على قدم المساواة أم لا.