0
BSTR newID_x = SysAllocString(L"newID");
BSTR newX_x = SysAllocString(L"newX");

functionA(&newID_x);

//Func A does some operation on newID_x, we have that value in newID_x now

functionA(&newX_x);
//After Func A is called for the second time, both newID_x and newX_x become the same
//i.e, both are pointing to same locations and hence values too

私の質問は、それは s の正しい動作ですか?最初に呼び出した後、新しいものBSTRを保存する必要がありますか?newX_xBSTRfunctionA

またはfunctionA、渡された s の割り当て/割り当て解除が間違っている可能性があることの一部が間違っていBSTRます。

4

1 に答える 1

0

あなたが説明するのは、「in-out」パラメーターのセマンティクスです。パラメーターは呼び出し前に初期化され、呼び出し中に変更され、呼び出し元に変更が表示されます。それは受け入れられますが、そのようなインターフェースを持つことはあまり便利ではありません。この場合、呼び出し先は を再割り当てしてBSTRから、所有権を呼び出し元に渡す必要があります。

于 2011-06-10T06:53:21.997 に答える