首先通过CString::GetData()取得CStringData对象的指针。该指针是通过存放字符串的指针m_pchData先后偏移sizeof(CStringData),从而得到了CStringData的地址。然后根据参数nMinBufLength给定的值重新实例化一个CStringData对象,使得新的对象里的字符串缓冲长度能够满足nMinBufLength。然后在重新设置一下新的CStrin...
GetData()->nDataLength = nNewLength; m_pchData[nNewLength] = '''\0'''; 其中CopyBeforeWrite是实现写拷贝技术的,这里不管它。 下面的代码就是重新设置CstringData对象中描述字符串长度的那个属性值的。首先取得当前字符串的长度,然后通过GetData()取得CstringData的对象指针,并修改里面的nDataLength成员值。 但...
下面的代码就是重新设置CStringData对象中描述字符串长度的那个属性值的。首先取得当前字符串的长度,然后通过GetData()取得CStringData的对象指针,并修改里面的nDataLength成员值。 但是,现在的问题是,我们虽然知道了错误的原因,知道了当修改了GetBuffer返回的指针所指向的值之后需要调用ReleaseBuffer才能使用CString的其他operat...
GetData()->nDataLength = nNewLength; m_pchData[nNewLength] = ‘\0‘; 其中CopyBeforeWrite是实现写拷贝技术的,这里不管它。 下面的代码就是重新设置CStringData对象中描述字符串长度的那个属性值的。首先取得当前字符串的长度,然后通过GetData()取得CStringData的对象指针,并修改里面的nDataLength成员值。 但是,...
CString GetData(); //设置被切分的文本 voidSetData(CString sData); //得到切分参数 BOOLGetSequenceAsOne() {returnm_bSequenceAsOne; }; //设置切分参数 voidSetSequenceAsOne(BOOLbSequenceAsOne) { m_bSequenceAsOne = bSequenceAsOne; }; //得到切分标志 ...
这样,就顺理成章的将字符串的真正的指针m_pszData和描述字符串信息的CStringData关联了起来。那么,我们也可以很容易的通过m_pszData反推出CStringData的指针,CSimpleStringT::GetData这个成员方法就提供了这么一个操作: 先把m_pszData 强转为 CStringData* 的类型,再在这个基础上做 -1 的偏移,得到的就是真正的CStri...
首先通过CString::GetData()取得CStringData对象的指针。该指针是通过存放字符串的指针m_pchData先 后偏移sizeof(CStringData),从而得到了CStringData的地址。 然后根据参数nMinBufLength给定的值重新实例化一个CStringData对象,使得新的对象里的字符串缓冲长
CName name; CString last, first; TCHAR middle; name.SetData(_T("John"),'Q', _T("Public")); ASSERT(name.GetLastName() == _T("Public")); name.GetData(first, middle, last); ASSERT((first == _T("John")) && (last == _T("Public"))); ...
GetData 先把m_pszData 强转为 CStringData* 的类型,再在这个基础上做 -1 的偏移,得到的就是真正的 CStringData 的地址。 3、CopyOnWrite机制的触发 CopyOnWrite——写时复制机制,这个机制也算非常常见了。我第一次接触这个机制,是 DLL 的写时复制,当要手动 Hook 一个 DLL 中的 API 时,会在 API 开头手动写...
< 0) { // actual copy necessary since one of the strings is locked AssignCopy(stringSrc.GetData()->nDataLength, stringSrc.m_pchData); } else { //其他情况,就先自己的数据空间释放掉,然后再指向stringSrc的数据空间 // can just copy references around Release(); ATLASSERT(stringSrc.GetData()...