Я не уверен, что понимаю вопрос или мотивацию.Если все, что вы хотите сделать, это, как описано в вопросе, скопировать значение URL->bstrVal
, то самый простой способ использовать класс-оболочку BSTR
для глобального.
namespace { // keep global private to .cpp file
CComBSTR globalURL;
}
void CBar::NavigateComplete2(IDispatch *pDisp, VARIANT *URL)
{
if (URL != NULL && URL->vt == VT_BSTR)
globalURL = URL->bstrVal;
В противном случае вам следуетиспользуйте необработанный BSTR
и скопируйте его с помощью SysAllocString
(и не забудьте SysFreeString
, когда закончите с глобальным.
Если вы этого не сделаетескопируйте строку (и скопируйте только указатель), владелец VARIANT
уничтожит ее, и вы получите глобальный с висящим указателем.