VarBstrFromI4 изменяет значение некоторого другого BSTR в программе

#c #winapi #mfc #ole #bstr

#c #winapi #mfc #ole #bstr

Вопрос:

 BSTR length;
BSTR checkLength = SysAllocString(TEXT("document.getElementsByTagName('tspan').length.toString()"));

HRESULT h = gWebView->stringByEvaluatingJavaScriptFromString(checkLength, amp;length);
SysFreeString(checkLength);

long longLength;
h = VarI4FromStr(length,0,0,amp;longLength);
SysFreeString(length);

BSTR index;
long longIndex = longLength - 1;
h = VarBstrFromI4(longIndex,0,0,amp;index);
  

Последняя строка VarBstrFromI4 изменяет значение index (BSTR) на мое желаемое значение, но также изменяет значение length (BSTR) на значение index (BSTR). Я пытался выполнить множество опций, включая SysAllocString с индексом и длиной, но та же проблема сохраняется.

Пожалуйста, помогите.

Ответ №1:

После того, как вы вызвали SysFreeString строку, вам больше не следует заботиться об этой строке. Освобожденная строка содержит внутренний адрес освобожденной памяти, который позже может быть выделен другой строкой или переменной. В этом случае просто случается, что новая строка помещается по тому же адресу памяти, что и старая строка.