5

null BSTR (null WCHAR* ポインター) を空の文字列として扱い、それに応じて BSTR を操作するすべてのコードを設計することは、少なくとも一般的な方法です。この質問に対する答えは同じです。

このプラクティスはどこに文書化されていますか? この規則を説明する公式文書はありますか?

4

3 に答える 3

6

さて、その質問に対する受け入れられた回答で与えられたリンクは、Eric Lippert による記事、Eric's Complete Guide To BSTR Semantics へのリンクです。公式のドキュメントではないことは間違いありませんが、Lippert は COM (特にスクリプト分野) の権威として知られています。

ただし、公式ドキュメントには次のように記載されています。

データ要素のない BSTR は、空の BSTR または NULL BSTR のいずれかです。空の BSTR は、存在するが長さゼロのデータ値を示します。NULL BSTR は、存在しないデータ値を示します。

したがって、公式にはどちらBSTRもデータ要素を持たない s ですが、セマンティクスがわずかに異なります (ただし、アプリケーションでこれら 2 つのケースを異なる方法で処理する必要があることは言うまでもありません)。この場合、私はそれらを同じように扱うという Lippert のアドバイスに従います。私にとって、実際の実装がどのように機能するかについての彼の実際の経験は、公式の BSTR ドキュメントの 1 つの文よりも重要です。

于 2009-05-06T06:39:11.983 に答える
5

マイケル・バーは、受け入れられるべきだと私が思うものを提供します。残念なことにBSTR、MSDN の のページにこの慣行が記載されていません。

さらに、MSDN ドキュメントの次のページから、この動作を推測できます。

  • SysFreeStringbstrpageはnull、関数が単純に戻る場合を報告します。
  • SysStringLennullページは、bstrパラメーターに a を渡すと、文字列の長さとしてゼロが返されることを報告しています。
  • SysStringByteLenページは同じ動作を報告します。null長さゼロを意味します。

ただし、ドキュメントは完全ではありません。

  • SysReAllocString*pbstrの場合に何が起こるかについては言及していませんnull
  • SysReAllocStringLen*pbstrの場合に何が起こるかについては言及していませんnull
于 2009-05-06T06:57:37.353 に答える