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;
}