在做一个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()