呼び出し元は渡されたデータを再利用する可能性があり、解放するとエラーが発生する可能性があるため、文字列を解放しないでください。その理由は、FreeBSTR
参照カウント メカニズムを使用せず、単純にSysFreeStringを呼び出すためです。ちなみに、文字列が関数の 1 つに割り当てられていると想定していますがSys(Re)Alloc...
、マネージ コードでは認識されていません。ここに示されている例は興味深いものです。あなたを呼び出しているアンマネージコードがこれであると想像してください (前のリンクから):
// shows using the Win32 function
// to allocate memory for the string:
BSTR bstrStatus = ::SysAllocString(L"Some text");
if (bstrStatus != NULL)
{
pBrowser->put_StatusText(bstrStatus);
// Free the string:
::SysFreeString(bstrStatus);
}
put_StatusText(...)
マネージコードに実装されているので、状況を再現しています。ご覧のとおり、呼び出し先の外部で、パラメーター文字列の割り当て/割り当て解除を担当する呼び出し元です。