-1
我有一个COM代码,我使用BSTR。:: SysFreeString()崩溃在WINDOWS2008只
在应用程序崩溃使用:: 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'是否'使用宽字符与否不是由UNICODE宏控制,所以用'_T()'宏与它不是(正常情况下,你应该总是使用宽字符,而你想使用宏应该是'OLECHAR()')。除此之外,我们将不得不看到更多的代码来诊断这一点。你能制作一个小的,可编辑的例子来展示这个问题吗? – Sven 2012-02-28 12:16:28
实际代码中没有更多。只是我会使用该变量bstrname并将其分配给接口的另一个成员变量。 – ckv 2012-02-28 12:17:59
但是这个代码本身没有问题(除非你编译时没有UNICODE,由于我提到的宏问题)并且不会导致崩溃。你不能指望我们神奇地理解实际问题。除非你能向我们展示一个能够再现问题的完整例子,否则我们无能为力。 – Sven 2012-02-28 12:20:00