Исправлено форматирование текста. — SchweinDeBurg
Здравствуйте, orefkov, Вы писали:
O>Используй #import, гораздо кучерявее
в мсдн-е дот нет-а нешел кое что:
#include <stdio.h>
#include <windows.h>
#import <msxml4.dll> raw_interfaces_only
using namespace MSXML2;
// Macro that calls a COM method returning HRESULT value:
#define HRCALL(a, errmsg) \
do { \
hr = (a); \
if (FAILED(hr)) { \
dprintf( "%s:%d HRCALL Failed: %s\n 0x%.8x = %s\n", \
__FILE__, __LINE__, errmsg, hr, #a ); \
goto clean; \
} \
} while (0)
// Helper function that put output in stdout and debug window
// in Visual Studio:
void dprintf( char * format, ...)
{
static char buf[1024];
va_list args;
va_start( args, format );
vsprintf( buf, format, args );
va_end( args);
OutputDebugStringA( buf);
printf("%s", buf);
}
// Helper function to create a DOM instance:
IXMLDOMDocument * DomFromCOM()
{
HRESULT hr;
IXMLDOMDocument *pxmldoc = NULL;
HRCALL( CoCreateInstance(__uuidof(DOMDocument40),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IXMLDOMDocument),
(void**)&pxmldoc),
"Create a new DOMDocument");
HRCALL( pxmldoc->put_async(VARIANT_FALSE),
"should never fail");
HRCALL( pxmldoc->put_validateOnParse(VARIANT_FALSE),
"should never fail");
HRCALL( pxmldoc->put_resolveExternals(VARIANT_FALSE),
"should never fail");
return pxmldoc;
clean:
if (pxmldoc)
{
pxmldoc->Release();
}
return NULL;
}
int main(int argc, char* argv[])
{
IXMLDOMDocument *pXMLDom=NULL;
IXMLDOMParseError *pXMLErr=NULL;
BSTR bstr = NULL;
VARIANT_BOOL status;
VARIANT var;
HRESULT hr;
CoInitialize(NULL);
pXMLDom = DomFromCOM();
if (!pXMLDom) goto clean;
VariantInit(&var);
V_BSTR(&var) = SysAllocString(L"stocks.xml");
V_VT(&var) = VT_BSTR;
HRCALL(pXMLDom->load(var, &status), "");
if (status!=VARIANT_TRUE) {
HRCALL(pXMLDom->get_parseError(&pXMLErr),"");
HRCALL(pXMLErr->get_reason(&bstr),"");
dprintf("Failed to load DOM from stocks.xml. %S\n",
bstr);
goto clean;
}
HRCALL(pXMLDom->get_xml(&bstr), "");
dprintf("XML DOM loaded from stocks.xml:\n%S\n",bstr);
clean:
if (bstr) SysFreeString(bstr);
if (&var) VariantClear(&var);
if (pXMLErr) pXMLErr->Release();
if (pXMLDom) pXMLDom->Release();
CoUninitialize();
return 0;
}
ща буду переваривать!!!
Создаю MFC Application
добавляю класс при помощи MFC Class TypeLib
выбираю MSXML Любой версии, создаю нужные классы, создаю экземпляры, в VS2005 компилятор находит 306 ошибок, в VS2003 нормально компилирует, но XMLDOMDocument не загружает документы.
29.03.06 15:09: Перенесено модератором из 'C/C++' — Кодт
Здравствуйте, KrikZ, Вы писали:
KZ>выбираю MSXML Любой версии, создаю нужные классы, создаю экземпляры, в VS2005 компилятор находит 306 ошибок, в VS2003 нормально компилирует, но XMLDOMDocument не загружает документы.
Q316317
KrikZ wrote:
> O>Используй #import, гораздо кучерявее
>
> в мсдн-е дот нет-а нешел кое что:
>
> #include <stdio.h>
> #include <windows.h>
> #import <msxml4.dll> raw_interfaces_only
Блин, MSDN как всегда жжот. Как будто специально фигню такую пишут.
Пиши так:
#include "stdafx.h"
#include <iostream>
#include <cassert>
#import <msxml4.dll> named_guids
int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL);
MSXML2::IXMLDOMDocumentPtr doc(MSXML2::CLSID_DOMDocument40);
assert(doc != NULL);
doc->async = false;
doc->validateOnParse = false;
doc->resolveExternals = false;
if(!doc->load(_T("C:\\temp\\test\\test2.xul")))
{
MSXML2::IXMLDOMParseErrorPtr err = doc->parseError;
std::cout << err->errorCode << " at "
<< err->filepos << ":" << err->linepos << " "
<< err->reason << std::endl;
}
else
{
std::cout << doc->xml << std::endl;
}
return 0;
}
Желательно #import перенести в stdafx.h файл. И не забывай расставлять try-catch(_com_error &) блоки.
Posted via RSDN NNTP Server 2.0