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