1

BSTR(ラッパークラスとして使用して)を作成するとき、のコンストラクターの_bstr_tいくつかを使用する必要があります。aはヌル文字を含む可能性のある長さのプレフィックス付き文字列であるため、指定されたネイティブ文字列のヌル終了に依存することなく、ネイティブ文字列を使用してそのような文字列を作成する可能性がなければなりません。_bstr_tBSTR

例を挙げると:

wchar_t* pwNativeString = L"abc\0def\0\0ghi\0\0\0"; // + automatic "\0"

// Now I want to create a BSTR using _bstr_t by this string.
_bstr_t spBSTR = _bstr_t(pwNativeString);

問題は、コンストラクターが のヌル終了に依存していることですpwNativeString。したがって、結果BSTRは公正であり、それ以上のものでは"abc"ありません。だから私の質問は次のとおりです:特定の長さの配列へのポインタを作成して配信する方法BSTRは? _bstr_t次の疑似コードの例では:

_bstr_t spBSTR = _bstr_t(pwNativeString, 15);
4

1 に答える 1

3

を使用SysAllocStringLenしてを割り当て、BSTR次に2つの引数の_bstr_tコンストラクターを使用して_bstr_tそこからオブジェクトを作成します。2番目のパラメータをに設定した場合はtrue、後で呼び出す必要がありますSysFreeString。それ以外の場合、_bstr_tオブジェクトは文字列を所有し、それを解放します。

BSTR bstrIn = SysAllocStringLen(L"abc\0def\0\0ghi\0\0\0", 15);
_bstr_t spBSTR(bstrIn, false);
于 2012-05-23T20:08:39.310 に答える