Access Violation

segunda-feira, janeiro 23, 2006

Oque esta errado com este código (Parte III)
Dando continuidade a série "Oque esta errado com este código?" apresento o terceito artigo.

Neste post o problema esta relacionado com COM (Component Object Model) e com o MSXML. Na realidade neste exemplo temos dois problemas.

Prepare suas ferramentas e boa sorte!
 0: #define _WIN32_WINNT 0x500
1:
2: #include <windows.h>
3: #include <atlbase.h>
4: #include <atlcom.h>
5:
6: #import "msxml3.dll" raw_interfaces_only
7:
8: void main()
9: {
10: CoInitializeEx(NULL, COINIT_MULTITHREADED);
11: CComPtr<MSXML2::IXMLDOMDocument> doc;
12:
13: HRESULT hr;
14: hr = doc.CoCreateInstance(__uuidof(MSXML2::DOMDocument30));
15: if (SUCCEEDED(hr))
16: {
17: VARIANT_BOOL sucesso;
18: hr=doc->load(CComVariant(L"c:\\Teste.xml"), &sucesso);
19: if (SUCCEEDED(hr) && sucesso != VARIANT_FALSE)
20: {
21: CComPtr<MSXML2::IXMLDOMNode> item;
22: hr = doc->selectSingleNode(CComBSTR(L"//a/b/c"), &item);
23: if (SUCCEEDED(hr))
24: {
25: // Faz alguma coisa com o nó apontado por 'item'.
26: }
27: }
28: }
29:
30: CoUninitialize();
31: }




[+/-] mostrar/esconder este post

3 Comments:

  • Heya! Não manjo nada de MSXML ou COM, mas percebi q esta faltando algo essencial no seu blog...

    FIRST POST!!!

    :)

    By Anonymous Anônimo, at 9:52 AM  

  • Na realidade eu coloquei um first post (talvez não seja claro, ou talvez eu não tenha entendido o que é um "first post" :)

    By Blogger programing-fun, at 3:56 PM  

  • Bom, só olhando percebi duas coisas: Fazer o CoUninitialize sem fazer o Release do CComPtr vai dar alguma bobagem quando o 'destructor' da classe for chamado. A segunda é que se não me engano o selectSingleNode (e o selectNodes) devolvem HRESULT == S_OK mesmo que os nodes da query não existem (voltam NULL ou node vazio, não me lembro). Fora isso nem...

    By Anonymous Anônimo, at 11:43 AM  

Postar um comentário

<< Home