CString的一个问题

王朝vc·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

CString的一个问题CString的Release函数实现如下:

void CString::Release()

{

if (GetData() != _afxDataNil)

{

ASSERT(GetData()->nRefs != 0);

if (InterlockedDecrement(&GetData()->nRefs) <= 0)

FreeData(GetData());

Init();

}

}

其中_afxDataNil定义如下:

AFX_STATIC_DATA int _afxInitData[] = { -1, 0, 0, 0 };

AFX_STATIC_DATA CStringData* _afxDataNil = (CStringData*)&_afxInitData;

sizeof(CString)等于4,它是一个指针。对于空的CString,MFC会让其指向一个静态数据_afxInitData。MFC通过判断CString的值是否等于_afxInitData的地址来判断CSting是否是空的。

如果在exe和dll之间传递CString对象,而exe和dll都与MFC静态链接,那么在exe和dll中的_afxInitData的地址可能是不同的。exe中的空CString传到dll中会被当成非空CString处理,然后就会发生错误。

一般而言,如果不是动态链接MFC类库,应尽量避免在exe和dll之间传递MFC的对象。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航