-1
私はBSTRを使用するCOMコードを持っています。:: WINDOWS2008でSysFreeString()がクラッシュする
アプリケーションがクラッシュしたことで使用して:: 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
}
一つの小さな問題:SysAllocString'は、それがにISNでとても '_T()'マクロを使用して、UNICODEマクロによって制御されていないワイド文字を使用していますか 'か(正常な状況では、常にワイド文字を使用し、マクロを使用するには 'OLECHAR()'でなければなりません)。それを超えて、私たちはこれを診断するためにもっと多くのコードを見なければなりません。問題を示す小さいコンパイル可能な例を作成できますか? – Sven
実際のコードには何もありません。その変数bstrnameを使用して、それをインターフェイスの別のメンバ変数に割り当てます。 – ckv
しかし、このコード自体は問題ありません(私が言及したマクロの問題のためにUNICODEなしでコンパイルしない限り)、クラッシュは発生しません。あなたは、私たちが実際の問題が魔法のように神になることを期待することはできません。問題を再現する完全な例を示すことができない限り、私たちは何もできません。 – Sven