CBSCore 中的字符串 SCZ
来源:互联网 发布:苹果越狱美化软件 编辑:程序博客网 时间:2024/06/01 22:34
CBSCore 中的字符串 SCZ
CBSCore 中的字符串 SCZ类似于 WCHAR*,但是,有一点不同,就是在WCHAR*前 -1位,保存了字符串的长度。
引用的地址还是 WCHAR*的起始位置。
不知道是怎么实现的。
由于不知道如何表示 -1位的长度,因此也就没有办法实现 SCZ结构。
好在可以用系统提供的函数进行初始化,但是,只能用PSCZ表示,即指向 SCZ的地址。
但是,再复杂也可以不管,让系统自己去做,我们只要把SCZ对象的地址保存下来就可以了,因此,把PSCZ定义成WCHAR*。
直接就按照内容,把它定义成:
typedefWCHAR *PSCZ;
CBSCore 中的许多字符串都是使用了这种格式。
如果直接用 WCHAR*代替 SCZ,函数运行也能运行,且结果也正确,但是,在退出时会出现 0xc0000374堆破坏的错误。这是因为在结束函数前要释放变量,释放 SCZ变量,不权要释放 SCZ变量指针指向的 WCHAR*字符串,还要释放 SCZ变量的前一位,即字符串的长度。
如果是用 WCHAR*代替 SCZ的话,SCZ变量的前一位由于没有初始化,那么释放这一位,就必然出错了。
为了方便转换,CBSCore提供了十多个函数(64位系统与 32位系统提供的函数数量不同)。
用法:
声明变量:
PSCZ *v10 =newPSCZ();
初始化成指定长度的空字符串:
SczAlloc(v10,16);
用 WCHAR*字符串进行初始化,也可以说是转换:
SczAllocFromSz(v10, L"C:\\Windows");
把PSCZ转换成 WCHAR*格式
WCHAR *scz = *v10;
应用示例:
LPCWSTRlpSrc =L"%SystemRoot%\\winsxs\\x86_microsoft-windows-servicingstack_31bf3856ad364e35_6.3.9600.18384_none_9dfef83fe2e442e4";
PSCZ *lpDst =newPSCZ();
SczAllocFromSz(lpDst,lpSrc);
FileExpandPath(*lpDst,lpDst);
SczEnsureBackslashTerminated(lpDst);
PSCZ *lpStackDirectory =newPSCZ() ;
FindServicingStackDirectory(lpStackDirectory);
LoadCbsCoreOnline();
提供的一些函数:
函数名
功能
SczAlloc
初始化指定长度
SczAllocConcat2Sz
连接两个 WCHAR*字符串到 SCZ
SczAllocConcatSz
连接一个 WCHAR*字符串到 SCZ
SczAllocConcatSzFast
连接一个 WCHAR*字符串到 SCZ
SczAllocFormatted
调用SczAllocFormattedArgs
SczAllocFormattedArgs
类似 print中的格式化参数
SczAllocFromAnsiSz
连接一个Ansi字符串到 SCZ
先MultiByteToWideChar
SczAllocFromStringTable
SczAllocFromSz
转换WCHAR*到 PSCZ格式
SczAllocFromSzAndEnsureBackslash
转换 WCHAR*到 PSCZ格式,保证结尾有 \
SczAllocPrefixSz
转换 WCHAR*到 PSCZ格式,用指定的前缀
SczAllocConcatUnicodeString
连接一个Unicode字符串到 SCZ
SczEnsureBackslashTerminated
转换 WCHAR*到 PSCZ格式,保证结尾有 \
SczGrowIfNeeded
增加字符串的长度
SczPublicAllocFromSz
转换有接口的字符串pMalloc
SczPublicFree
释放有接口的字符串 pMalloc
SczSize
计算 SCZ字符串的长度,实现就是读 -1处的值
FileExpandPath
把字符串中的环境变量扩展成实际值
- CBSCore 中的字符串 SCZ
- 解析 SCZ 字符串
- 解析CbsCore 模式
- Scz的一些文档
- [20151014]SCZ训练
- [20151015]SCZ训练
- [20151018]SCZ训练
- [20151019]SCZ训练
- [20151017]SCZ训练
- [20151020]SCZ训练
- 取字符串中的字符串
- [字符串]字符串中的替换
- SCZ的3篇有关sam的文章
- 获取字符串中的子字符串
- 删除字符串中的子字符串
- 替换字符串中的子字符串
- Bailian2888 字符串中的数字【字符串】
- 替换字符串中的一个字符串
- HeaderFirst
- 3月题外:关于GeoServer和OpenLayers3实用开源插件或组件的总结
- 微信公众号开发--模板消息
- Gradle的仓库搭建
- Linux下的管道容量及其实现机制
- CBSCore 中的字符串 SCZ
- JavaSE程序分析003 静态代码块与构造代码块的小事情
- Problem E: 平面上的点——Point类 (II)
- 安装Cocoapods的步骤及遇到错误
- Hibernate-Transaction(事务)
- 浅谈判断图片是否加载完成的方法
- RESTful API设计系列三:资源
- 构造函数
- 3-5Python中的字符串