读书人

XML解析类CMarkUp类怎么在基本的Win

发布时间: 2012-06-20 20:37:21 作者: rapoo

XML解析类CMarkUp类,如何在基本的Win32 Console Application中使用?
按照网上的说法做,就是把MarkUp.h和MarkUp.cpp添加进来,出现错误!!!
我的环境是VS2005,建立的项目类型是Win32 Console Application(如果建立的是MFC Application,就不会出错),错误信息:
“fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]”

查了一下,有人说把“Use of MFC”的选项从“Use Standard Windows Libraries”改成“Use MFC in a Shared DLL”。
1:但是我改了以后,却带来有一个错误“\microsoft visual studio 8\vc\atlmfc\include\afxv_w32.h(16) : fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>”;
2:我看到有些人的项目并没有修改这个选项,也不清楚到底在哪个地方设置了一下,知道的顶一下啊。
3:有些人说在项目设置里定义宏MARKUP_STL(MarkUp.h里使用了这个宏),不是在源文件定义这个宏,晕,本人新手,怎么在项目设置里添加宏,而不是在源文件?

最好不要修改“Use of MFC”,有知情人士请说下怎么解决呢?


[解决办法]
我也遇到和楼主一样的问题,由于我的工程将来可能需要移植到linux上,所以不能使用CString等MFC里的东西。
但是CMarkup是默认使用CString 的,可以看下markup.h里的定义

C/C++ code
#if defined(MARKUP_STL) // STL#include <string>#if defined(MARKUP_WCHAR)#define MCD_STR std::wstring#else // not MARKUP_WCHAR#define MCD_STR std::string#endif // not MARKUP_WCHAR#define MCD_2PCSZ(s) s.c_str()#define MCD_STRLENGTH(s) (int)s.size()#define MCD_STRCLEAR(s) s.erase()#define MCD_STRCLEARSIZE(s) MCD_STR t; s.swap(t)#define MCD_STRISEMPTY(s) s.empty()#define MCD_STRMID(s,n,l) s.substr(n,l)#define MCD_STRASSIGN(s,p,n) s.assign(p,n)#define MCD_STRCAPACITY(s) (int)s.capacity()#define MCD_STRINSERTREPLACE(d,i,r,s) d.replace(i,r,s)#define MCD_GETBUFFER(s,n) new MCD_CHAR[n+1]; s.reserve(n)#define MCD_RELEASEBUFFER(s,p,n) s.assign(p,n); delete[]p#define MCD_BLDRESERVE(s,n) s.reserve(n)#define MCD_BLDCHECK(s,n,d) ;#define MCD_BLDRELEASE(s) ;#define MCD_BLDAPPENDN(s,p,n) s.append(p,n)#define MCD_BLDAPPEND(s,p) s.append(p)#define MCD_BLDAPPEND1(s,c) s+=(MCD_CHAR)(c)#else // not STL, i.e. MFC#include <afx.h>#define MCD_STR CString#define MCD_2PCSZ(s) ((MCD_PCSZ)s)#define MCD_STRLENGTH(s) s.GetLength()#define MCD_STRCLEAR(s) s.Empty()#define MCD_STRCLEARSIZE(s) s=MCD_STR()#define MCD_STRISEMPTY(s) s.IsEmpty()#define MCD_STRMID(s,n,l) s.Mid(n,l)#define MCD_STRASSIGN(s,p,n) memcpy(s.GetBuffer(n),p,(n)*sizeof(MCD_CHAR));s.ReleaseBuffer(n);#define MCD_STRCAPACITY(s) (((CStringData*)((MCD_PCSZ)s)-1)->nAllocLength)#define MCD_GETBUFFER(s,n) s.GetBuffer(n)#define MCD_RELEASEBUFFER(s,p,n) s.ReleaseBuffer(n)#define MCD_BLDRESERVE(s,n) MCD_CHAR*pD=s.GetBuffer(n); int nL=0#define MCD_BLDCHECK(s,n,d) if(nL+(int)(d)>n){s.ReleaseBuffer(nL);n<<=2;pD=s.GetBuffer(n);}#define MCD_BLDRELEASE(s) s.ReleaseBuffer(nL)#define MCD_BLDAPPENDN(s,p,n) MCD_PSZNCPY(&pD[nL],p,n);nL+=n#define MCD_BLDAPPEND(s,p) MCD_PSZCPY(&pD[nL],p);nL+=MCD_PSZLEN(p)#define MCD_BLDAPPEND1(s,c) pD[nL++]=(MCD_CHAR)(c)#endif // not STL 

读书人网 >C++

热点推荐