Iwao Dev

気付いたことをメモしています.

この画面は、簡易表示です

2012/01/26

XML の書出しテスト

XML に書き出すコードをテスト (VC6 + MFC で動作するもの)
他の言語や VC 9 などの場合は How Do I Use DOM? にある.


pDoc.CreateInstance で,結果が
  0x800401f0 CoInitialize は呼び出されていません。

xml のファイルは出来るが,中身がなし.
  pDoc->loadXML(…) で,デバッグの出力に以下が 3 つ.
  例外処理 (初回) は T_xml_1.exe (KERNEL32.DLL) にあります: 0xE0000001: (名前がありません)。
  ここで手間取ったので,…
    loadXML で与える文字列が,XML の文字列として正しくなかったのが原因.



// 以下は,そのテストコード全体
// T_xml_1.cpp : コンソール アプリケーション用のエントリ ポイントの定義
// 
#include	"StdAfx.h"
#include	"T_xml_1.h"
#import	named_guids	
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

BOOL	TestXML	(void)
{
	HRESULT	hr = ::CoInitialize(NULL) ;
	if (FAILED(hr))			{	return	FALSE ;		}
	{
		MSXML::IXMLDOMDocumentPtr	pDoc = NULL ;
		hr = pDoc.CreateInstance(MSXML::CLSID_DOMDocument) ;
		if (FAILED(hr))		{	return	FALSE ;		}
		pDoc->loadXML(_T("<?xml version=\"1.0\" encoding=\"utf-8\"?> <r> </r> ")) ;
		CString	tmpPath ;
		{
			UINT	size = MAX_PATH ;
			::GetTempPath	(size,tmpPath.GetBuffer(size)) ;
			tmpPath.ReleaseBuffer() ;
			}
		CString	tmpXML = tmpPath + CTime::GetCurrentTime().Format(_T("%H%M%S.xml")) ;
		pDoc->save(LPCTSTR(tmpXML)) ;
		}
	::CoUninitialize() ;
	return	TRUE ;
	}

/////////////////////////////////////////////////////////////////////////////
// 唯一のアプリケーション オブジェクト
CWinApp theApp;

using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;
	// MFC の初期化および初期化失敗時のエラーの出力
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))	{
		// TODO: 必要に応じてエラー コードを変更してください。
		cerr << _T("Fatal Error: MFC initialization failed") << endl;
		nRetCode = 1;
	}
	else	{
		/*
		// TODO: この位置にアプリケーションの動作を記述してください。
		CString strHello;
		strHello.LoadString(IDS_HELLO);
		cout << (LPCTSTR)strHello << endl;
		*/
		TestXML() ;
	}
	return nRetCode;
}

http://mish.work/joomla/cpp/xml.html

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  にほんブログ村 IT技術ブログへ



    top

    %d人のブロガーが「いいね」をつけました。