CMakeup应用中的错误,此方法能用,已经验证,谢谢这位大哥!!!

在做一个Ocx组件的项目时,需要解析Xml文件,但是死活编译不过去了,之前一直用得好好的,现在忽然用不了了,把我这个急呀。最后没辙了,只好换用其他方案了。

暂时解决了麻烦,但是以后肯定还会遇到呀,没办法。我再试试看吧。

其实问题主要出在这个地方:

error C2065: “CStringData”: 未声明的标识符

咋一看,不就是少引用了一个文件吗,把他加上不就完了吗。但实际上加进去了页还是不行。唉!那么多的头文件,谁又知道该怎么引用呢。看看代码吧。

仔细一瞧,问问题出在这里:

#define MCD_STRCAPACITY(s) (((CStringData*)((MCD_PCSZ)s)-1)->nAllocLength)
什么意思呢,就是要获取目标字符串的实际分配的内存大小。哦,对了,按照宏的解析,这里的S就是一个CString字符串。
在他的前面还有一个宏:
#define MCD_STRLENGTH(s) s.GetLength()
显然这是获取字符串的长度的。那么有没有函数可以直接获取CString的分配的内存大小呢。还真有!
 int GetAllocLength() const throw()
 {
  return( GetData()->nAllocLength );
 }
 CStringData* GetData() const throw()
 {
  return( reinterpret_cast< CStringData* >( m_pszData )-1 );
 }
大家看一看上面这两个函数,它们组合起来是什么?
reinterpret_cast< CStringData* >(( m_pszData )-1)->nAllocLength 
这不就是那个宏想要表达的意思吗。
所以,问题就解决了。
将原来的定义改为
#define MCD_STRCAPACITY(s) s.GetAllocLength()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值