null BSTR (null WCHAR* ポインター) を空の文字列として扱い、それに応じて BSTR を操作するすべてのコードを設計することは、少なくとも一般的な方法です。この質問に対する答えは同じです。
このプラクティスはどこに文書化されていますか? この規則を説明する公式文書はありますか?
さて、その質問に対する受け入れられた回答で与えられたリンクは、Eric Lippert による記事、Eric's Complete Guide To BSTR Semantics へのリンクです。公式のドキュメントではないことは間違いありませんが、Lippert は COM (特にスクリプト分野) の権威として知られています。
ただし、公式ドキュメントには次のように記載されています。
データ要素のない BSTR は、空の BSTR または NULL BSTR のいずれかです。空の BSTR は、存在するが長さゼロのデータ値を示します。NULL BSTR は、存在しないデータ値を示します。
したがって、公式にはどちらBSTR
もデータ要素を持たない s ですが、セマンティクスがわずかに異なります (ただし、アプリケーションでこれら 2 つのケースを異なる方法で処理する必要があることは言うまでもありません)。この場合、私はそれらを同じように扱うという Lippert のアドバイスに従います。私にとって、実際の実装がどのように機能するかについての彼の実際の経験は、公式の BSTR ドキュメントの 1 つの文よりも重要です。
マイケル・バーは、受け入れられるべきだと私が思うものを提供します。残念なことにBSTR
、MSDN の のページにこの慣行が記載されていません。
さらに、MSDN ドキュメントの次のページから、この動作を推測できます。
SysFreeString
bstr
pageはnull
、関数が単純に戻る場合を報告します。SysStringLen
null
ページは、bstr
パラメーターに a を渡すと、文字列の長さとしてゼロが返されることを報告しています。SysStringByteLen
ページは同じ動作を報告します。null
長さゼロを意味します。ただし、ドキュメントは完全ではありません。
SysReAllocString
*pbstr
の場合に何が起こるかについては言及していませんnull
。SysReAllocStringLen
*pbstr
の場合に何が起こるかについては言及していませんnull
。