c++ - CMarkup XML 处理

标签 c++ visual-studio-2010 visual-c++

这是我的第一篇文章,如有错误请见谅。我目前在我的 Visual C++ 2010 Express 项目中使用 CMarkup,它是由 FirstObject 制作的 XML 修饰符/解析器。当我尝试使用它们的函数 CMarkup::Load("Filename.xml") 加载 xml 文件时,一切都可以正常编译,但我收到一个运行时错误,我认为这是一个错误的指针造成的,但这是我不明白的!这是我使用的代码

g_XMLSeamanConversations.Load(MCD_T("SeamanVocabulary.xml"));
g_XMLSeamanConversations.FindElem(MCD_T("SeamanVocabulary"));
g_XMLSeamanConversations.IntoElem();
g_XMLSeamanConversations.FindElem(MCD_T("SeamanQuestions"));
g_XMLSeamanConversations.IntoElem();

当我的代码调用 Load() 时; function 程序在此停止

template <class _T1, class _T2>
inline void _Param_Construct_aux(_T1* __p, const _T2& __val, const __true_type&) 
{
// We use binary copying for POD types since it results
// in a considerably better code at least on MSVC.
// This is the problem -----> *__p = _T1(__val);
}

此“错误”代码位于“_Construct.h”中

此后我的代码将不会运行。如果有人能对此做出头脑或故事,我将负债累累!先谢谢你!!!

编辑:好的,这是调用顺序

bool CMarkup::Load( MCD_CSTR_FILENAME szFileName )
{
if ( m_nDocFlags & (MDF_READFILE|MDF_WRITEFILE) )
return false;
if ( ! ReadTextFile(szFileName, m_strDoc, &m_strResult, &m_nDocFlags) )
return false;
return x_ParseDoc();
}

然后

bool CMarkup::ReadTextFile( MCD_CSTR_FILENAME szFileName, MCD_STR& strDoc, 
MCD_STR* pstrResult, int* pnDocFlags, MCD_STR* pstrEncoding )
{
// Static utility method to load text file into strDoc
//
FilePos file;
file.m_nDocFlags = (pnDocFlags?*pnDocFlags:0) | MDF_READFILE;
bool bSuccess = file.FileOpen( szFileName );
if ( pstrResult )
*pstrResult = file.m_strIOResult;
MCD_STRCLEAR(strDoc);
if ( bSuccess )
{
file.FileSpecifyEncoding( pstrEncoding );
file.m_nOpFileByteLen = (int)((MCD_INTFILEOFFSET)
(file.m_nFileByteLen - file.m_nFileByteOffset));
bSuccess = file.FileReadText( strDoc );
file.FileClose();
if ( pstrResult )
*pstrResult += file.m_strIOResult;
if ( pnDocFlags )
*pnDocFlags = file.m_nDocFlags;
}
return bSuccess;
}

然后

public:                         // Append, operator+=, push_back.

_Self& operator+=(const _Self& __s) { return append(__s); }

然后

public:
_Self& append(const _Self& __s)
{ return _M_append(__s._M_Start(), __s._M_Finish()); }

然后

template <class _CharT, class _Traits, class _Alloc>
basic_string<_CharT, _Traits, _Alloc>&
basic_string<_CharT, _Traits, _Alloc>::_M_append(const _CharT* __first,
const _CharT*     __last) {
if (__first != __last) {
size_type __n = __STATIC_CAST(size_type, __last - __first);
if (__n >= this->_M_rest()) {
size_type __len = _M_compute_next_size(__n);
pointer __new_start = this->_M_start_of_storage.allocate(__len, __len);
pointer __new_finish = _STLP_PRIV __ucopy(this->_M_Start(),
this->_M_Finish(),    __new_start);
__new_finish = _STLP_PRIV __ucopy(__first, __last, __new_finish);
_M_construct_null(__new_finish);
this->_M_deallocate_block();
this->_M_reset(__new_start, __new_finish, __new_start + __len);
}
else {
const _CharT* __f1 = __first;
++__f1;
_STLP_PRIV __ucopy(__f1, __last, this->_M_finish + 1);
_M_construct_null(this->_M_finish + __n);
_Traits::assign(*end(), *__first);
this->_M_finish += __n;
}
}
return *this;
}

然后

template <class _RandomAccessIter, class _OutputIter>
inline _OutputIter __ucopy(_RandomAccessIter __first,
_RandomAccessIter __last,  _OutputIter __result)
{ return __ucopy(__first, __last, __result,
random_access_iterator_tag(),    (ptrdiff_t*)0); }

然后

template <class _RandomAccessIter, class _OutputIter, class _Distance>
inline _OutputIter __ucopy(_RandomAccessIter __first, _RandomAccessIter __last,
_OutputIter __result, const random_access_iterator_tag &,    _Distance*) {
_OutputIter __cur = __result;
_STLP_TRY {
for (_Distance __n = __last - __first; __n > 0; --__n) {
_Param_Construct(&*__cur, *__first);
++__first;
++__cur;
}
return __cur;
}
_STLP_UNWIND(_STLP_STD::_Destroy_Range(__result, __cur))
_STLP_RET_AFTER_THROW(__cur)
}

然后

template <class _T1, class _T2>
inline void _Param_Construct_aux(_T1* __p, const _T2& __val, const __true_type&) {
// We use binary copying for POD types since it results
// in a considerably better code at least on MSVC.
*__p = _T1(__val);
}

最后

template <class _T1, class _T2>
inline void _Param_Construct_aux(_T1* __p, const _T2& __val, const __true_type&) {
// We use binary copying for POD types since it results
// in a considerably better code at least on MSVC.
*__p = _T1(__val);
}

希望这有帮助!!!

最佳答案

这可能是 Unicode 设置问题。试试这些选项

  • 在预处理器部分使用MARKUP_STL
  • 取消选中“从父项或项目默认值继承”
  • 复制除 UNICODE_UNICODE 之外的任何其他预处理器宏,并将其与 WIN32,MARKUP_STL 一起放在顶部框上。
  • 从您自己的代码中删除 MCD_T("") 并仅使用 .Load("filename.xml")

这应该有效。

关于c++ - CMarkup XML 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10809536/

相关文章:

c# - 获取程序集路径而不是程序集运行的临时路径

c++ - 'strcpy' 和 'strcpy_s' 之间的区别?

visual-c++ - dllexport 和 dllimport 之间有什么区别?

c++ - make_pair 如何知道其参数的类型?

c++ - 树节点之间最大距离的运行时错误

c++ - 在 C++ 中使用 __asm 将 short 类型的变量移动到 EAX(VS 2010)

c# - 为什么我的机器需要完全重置 IIS 才能看到 ASP.NET 项目的代码更改?

c++ - 基类中的唯一指针禁止实例化,错误为 "attempting to reference a deleted function"

c++ - 使用 gmp 固定大小的整数...?

c++ - 使用 mpl::transform 生成新序列