-1

BSTRを使用するCOMコードがあります。

:: 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 

}
4

1 に答える 1

3

BSTR のような生のフォームの使用をやめることをお勧めします。代わりに、未加工の BSTR ポインターをカプセル化する _bstr_t などのラッパー クラスを使用します。このクラスは、必要に応じて、SysAllocString と SysFreeString およびその他の BSTR API への関数呼び出しを通じて、リソースの割り当てと割り当て解除を管理します。

詳細については、次のリンクを参照してください

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

于 2012-02-28T12:36:49.823 に答える