Frage

Es ist zumindest gängige Praxis null BSTR (null WCHAR * Zeiger) als eine leere Zeichenfolge zu behandeln und Design aller Code Manipulation BSTRs entsprechend. Antworten auf diese Frage sagen das gleiche.

Wo ist diese Praxis dokumentiert? Gibt es ein offizielles Dokument beschreibt diese Konvention?

War es hilfreich?

Lösung

Nun, da der Link in der akzeptierten Antwort auf diese Frage ist zu einem Artikel von Eric Lippert, Erics Complete Guide To BSTR Semantics . Während es würde auf jeden Fall nicht offizielle Dokumentation sein, ist Lippert eine bekannte Autorität auf COM (insbesondere in der Scripting-Arena).

Allerdings die offizielle Dokumentation dies zu sagen hat:

  

A BSTR ohne Datenelemente entweder ein leerer BSTR oder eine NULL BSTR. Ein leerer BSTR zeigt eine vorhanden, aber die Länge Null, Datenwert. Ein NULL BSTR zeigt einen Datenwert, der nicht vorhanden ist.

Also, offiziell sind sie beide BSTRs ohne Datenelemente, aber mit leicht unterschiedlicher Semantik (obwohl es gibt nichts zu sagen, dass diese zwei Fälle behandelt werden müssen, unterschiedlich in Ihrer Anwendung). In diesem Fall würde ich folgen sicherlich Lippert Rat sie gleich zu behandeln. Für mich seine praktische Erfahrung mit, wie tatsächliche Implementierungen Arbeit mehr Gewicht als der Satz in dem offiziell BSTR Dok.

Andere Tipps

Michael Burr gibt, was ich denke, sollte die akzeptierte Antwort sein. Es ist bedauerlich, dass die Seite für BSTR in MSDN dies nicht dokumentieren Praxis.

Darüber hinaus können Sie dieses Verhalten von diesen Seiten in der MSDN-Dokumentation entnehmen:

  • SysFreeString Seite berichtet, dass, wenn bstr ist die Funktion einfach null kehrt zurück.
  • SysStringLen Seite berichtet, dass eine null für den bstr Parameter übergeben gibt Null für die String-Länge.
  • SysStringByteLen Seite meldet das gleiche Verhalten; null bedeutet die Länge Null.

Allerdings ist die Dokumentation nicht vollständig:

Umgang mit null BSTR als leere Zeichenfolge Nähte eine gängige Praxis zu sein, aber die technische Dokumentation bei Microsoft tatsächlich festgestellt, heißt es, dass es ist ein Unterschied zwischen diesen beiden.

  

Für jedes Dokument verweist sowohl [MS-DTYP] und [MS-OAUT] unter Angabe   BSTR in einem Draht Darstellung Zusammenhang muß als in Betracht gezogen werden   Bezug auf die BSTR-Typ übertragen werden, während die Angabe BSTR in a   Speicherrepräsentation Zusammenhang ist als Bezugnahme auf das in Betracht gezogen werden,   präsentiert BSTR-Typ ([MS-DTYP] Abschnitt 2.2.5). reflektierende der   Terminologie dargestellt BSTRs, eine NULL BSTR verwendet oder übertragen NULL   BSTR, wird als die Draht Darstellung eines NULL definiert BSTR dargestellt;   und eine leere BSTR oder leer BSTR übertragen wird, wenn der Draht definiert   Darstellung einer Null-Länge dargestellt BSTR. Die Erhaltung dieser   Unterscheidung in der Draht Darstellung ermöglicht Clients und Servern   unterscheiden zwischen NULL präsentiert BSTRs und Null-Länge präsentiert   BSTRs und assoziiert damit möglicherweise unterschiedliche, anwendungsspezifische   Semantik zu diesen beiden Werten.

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

So ist es bis zu den Implementierungen ist, ob sie beide gleich behandeln oder nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top