:: SysFreeString () сбой только в WINDOWS2008 - PullRequest
0 голосов
/ 28 февраля 2012

У меня есть COM-код, где я использую BSTR.

В этом случае происходит сбой приложения при использовании :: SysFreeString ()

Однако то же самое работает в WINDOWS2003, WIN7, WINXP и т. Д.

Любая идея о том, что является причиной проблемы или что может быть не так.Пример кода как показано ниже

class CFoo::IUser 
{  
BSTR UserName; 

}
HRESULT CBar::FooMethod(VARIANT *vOut) 
{
//create interface, variant and fill the object.

BSTR bstrname = ::SysAllocString(_T("Username")); 
//use bstrname to fill interface structure.
//finished using now deallocate memory

::SysFreeString(bstrname); // crashing here only in windows 2008 R2 

}

1 Ответ

3 голосов
/ 28 февраля 2012

Я бы предложил прекратить использовать необработанные формы, такие как BSTR. Вместо этого используйте классы-оболочки, такие как _bstr_t, который инкапсулирует необработанный указатель BSTR. Класс управляет распределением и освобождением ресурсов посредством вызовов функций для SysAllocString и SysFreeString и других API-интерфейсов BSTR, когда это необходимо.

Подробнее по ссылке

http://msdn.microsoft.com/en-us/library/zthfhkd6%28v=vs.80%29.aspx

...