Tôi đang cố gắng gỡ lỗi những gì dường như là một vấn đề phân tích cú pháp XML trong mã của tôi. Chúng tôi đã tách nó xuống để đoạn mã sau:Làm cách nào để xác định tại sao cuộc gọi đến IXMLDOMDocument :: load() không thành công?
HRESULT
CXmlDocument::Load(IStream* Stream)
{
CComVariant xmlSource(static_cast<IUnknown*>(Stream));
VARIANT_BOOL isSuccessful;
* HRESULT hr = m_pXmlDoc->load(xmlSource, &isSuccessful);
return (hr == S_FALSE) ? E_FAIL : hr;
}
Lưu ý:m_pXmlDoc
là loại CComPtr<IXMLDOMDocument>
.
Dường như cuộc gọi tới IXMLDOMDocument::load()
(được đánh dấu bằng *) không thành công - IOW, nó đang trả về S_FALSE
.
Tôi không thể bước vào load()
để xác định lý do tại sao nó không thành công vì đây là cuộc gọi COM.
MSDN page cho phương pháp này dường như không mang lại nhiều thông tin chi tiết.
Tôi có một vài linh cảm:
- XML được tạo không đúng
- Các tập tin XML là quá lớn (khoảng 120MB)
- Đó là một vấn đề bộ nhớ liên quan đến (kích thước quá trình được đến> 2GB tại thời điểm thất bại)
- NB: Một khóa registry đã được thiết lập để cho phép kích thước quá trình trở thành lớn này, như kích thước quá trình hợp lệ lớn nhất cho WinXP, AFAIK, là 2GB).
Bất kỳ ý tưởng nào về lý do tại sao cuộc gọi này có thể bị lỗi?
Bạn đã thử 'parseError' chưa? http://msdn.microsoft.com/en-us/library/ms756041%28VS.85%29.aspx –