2009-05-06 5 views
5

Es ist zumindest üblich, Null BSTR (Null WCHAR * Zeiger) als eine leere Zeichenfolge zu behandeln und alle BSTR-Code-Bearbeitung entsprechend zu entwerfen. Antworten auf this question sagen das gleiche.Wo wird null BSTR dokumentiert?

Wo wird diese Vorgehensweise dokumentiert? Gibt es ein offizielles Dokument, das diese Konvention beschreibt?

Antwort

5

Nun, der Link in der angenommenen Antwort auf diese Frage ist zu einem Artikel von Eric Lippert, Eric's Complete Guide To BSTR Semantics. Während es definitiv nicht offizielle Dokumentation sein würde, ist Lippert eine gut bekannte Autorität auf COM (besonders in der Scripting-Arena).

Jedoch hat the official documentation folgendes zu sagen:

A BSTR ohne Datenelemente entweder ein leerer BSTR oder eine NULL BSTR. Ein leerer BSTR zeigt einen gegenwärtigen Datenwert von Null Länge an. Ein NULL BSTR zeigt einen Datenwert an, der nicht vorhanden ist. So

, offiziell sind sie beide BSTR s ohne Datenelemente, aber mit leicht unterschiedlichen 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 Lipperts Rat befolgen, sie gleich zu behandeln. Für mich hat seine praktische Erfahrung, wie die tatsächlichen Implementierungen funktionieren, mehr Gewicht als der eine Satz im offiziellen BSTR-Dokument.

+0

Ich war nicht der Architekt für VBScript, entweder de jure oder de facto; Ich war ein Entwickler im Scripting-Team und implementierte viele Funktionen in VBScript, aber ich war sicherlich nicht auf der Architekt-Ebene. –

+0

Eric - Ich habe diesen Teil entfernt. Entschuldige den Fehler (ich hoffe du nimmst es als Kompliment). –

4

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

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

  • SysFreeString Seite berichtet, dass, wenn bstr ist null die Funktion einfach zurückgibt.
  • SysStringLen Seite berichtet, dass die Übergabe eines null für den bstr Parameter gibt Null für die Zeichenfolge Länge zurück.
  • SysStringByteLen Seite meldet das gleiche Verhalten; null bedeutet Nulllänge.

Allerdings ist die Dokumentation nicht vollständig: