Iwao Dev

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

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

SVG

xmlns を間違えて 0xE06D7363

xmlns の所を xmlne とタイプミス.そのまま実行して 0xE06D7363.
0xE06D7363
0xE06D7363
—————————
Microsoft Visual C++
—————————
ハンドルされていない例外 は T_xml_7.exe (KERNEL32.DLL) にあります: 0xE06D7363: Microsoft C++ Exception。
—————————
OK
—————————
通常の実行の場合は,
Abnormal Program Termination
—————————
Microsoft Visual C++ Debug Library
—————————
Debug Error!
Program: …NGS\ALL USERS\DOCUMENTS\VC_TEST\SVG\T_xml_7\Debug\T_xml_7.exe
abnormal program termination

(Press Retry to debug the application)
—————————
中止(A) 再試行(R) 無視(I)
—————————

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

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


XML の書出しテスト – 4

xmlns="" が付加されない方法がわからなかったので,逆に svg:svg などと出力する様に変更.
<?xml version="1.0" encoding="utf-8"?>
<!–SVG 出力テスト–>
<svg:svg width="50%" height="50%" viewBox="0 0 100 100" xmlns:svg="http://www.w3.org/2000/svg">
<svg:g stroke="red" stroke-width="0.3" stroke-dasharray="3 3">
<svg:line x1="0" x2="0" y1="10" y2="90"/>
<svg:line x1="10" x2="10" y1="10" y2="90"/>
<svg:line x1="20" x2="20" y1="10" y2="90"/>
<svg:line x1="30" x2="30" y1="10" y2="90"/>
<svg:line x1="40" x2="40" y1="10" y2="90"/>
</svg:g>
</svg:svg>


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 ;        }
MSXML::IXMLDOMProcessingInstructionPtr pi = pDoc->createProcessingInstruction(L”xml”, L”version=’1.0′ encoding=’utf-8′ “);
pDoc->appendChild(pi);
MSXML::IXMLDOMCommentPtr pc = pDoc->createComment(L”SVG 出力テスト”);
pDoc->appendChild(pc);
{
MSXML::IXMLDOMElementPtr    pRoot = NULL ;
pRoot = pDoc->createElement(L”svg:svg”);
{    //    <svg width =’50%’ height=’50%’ viewBox=’0 0 100 100′ xmlns=”http://www.w3.org/2000/svg”>
MSXML::IXMLDOMAttributePtr    paw = pDoc->createAttribute(L”width”);
paw->value = L”50%”;
pRoot->setAttributeNode(paw);
MSXML::IXMLDOMAttributePtr    pah = pDoc->createAttribute(L”height”);
pah->value = L”50%”;
pRoot->setAttributeNode(pah);
MSXML::IXMLDOMAttributePtr    pav = pDoc->createAttribute(L”viewBox”);
pav->value = L”0 0 100 100″;
pRoot->setAttributeNode(pav);
MSXML::IXMLDOMAttributePtr    pan = pDoc->createAttribute(L”xmlns:svg”);
pan->value = _T(“http://www.w3.org/2000/svg”) ;
pRoot->setAttributeNode(pan);
}
pDoc->appendChild(pRoot);
{    //    <g stroke=’red’ stroke-width=’0.3′ stroke-dasharray=’3 3′>
MSXML::IXMLDOMElementPtr pGrop= pDoc->createElement(_T(“svg:g”));
{
MSXML::IXMLDOMAttributePtr    pas = pDoc->createAttribute(L”stroke”);
pas->value = _T(“red”) ;
pGrop->setAttributeNode(pas);
MSXML::IXMLDOMAttributePtr    paw = pDoc->createAttribute(L”stroke-width”);
paw->value = _T(“0.3″) ;
pGrop->setAttributeNode(paw);
MSXML::IXMLDOMAttributePtr    pad = pDoc->createAttribute(L”stroke-dasharray”);
pad->value = _T(“3 3″) ;
pGrop->setAttributeNode(pad);
}
pRoot->appendChild(pGrop) ;
{
for (int index=0 ; index<5 ; index++) {
//    <line  x1=”10″*x x2=”10″*x y1=”0″ y2=”100″ />
MSXML::IXMLDOMElementPtr pLine= pDoc->createElement(L”svg:line”);
{
CString    xStr ;        xStr.Format(_T(“%d”),10*index) ;
MSXML::IXMLDOMAttributePtr    pax = pDoc->createAttribute(L”x1″);
pax->value = LPCTSTR(xStr) ;
pLine->setAttributeNode(pax);
MSXML::IXMLDOMAttributePtr    pa2 = pDoc->createAttribute(L”x2″);
pa2->value = LPCTSTR(xStr) ;
pLine->setAttributeNode(pa2);
MSXML::IXMLDOMAttributePtr    pay = pDoc->createAttribute(L”y1″);
pay->value = _T(“10″) ;
pLine->setAttributeNode(pay);
MSXML::IXMLDOMAttributePtr    pae = pDoc->createAttribute(L”y2”);
pae->value = _T(“90”) ;
pLine->setAttributeNode(pae);
}
pGrop->appendChild(pLine) ;
}
}
}
}
CString    tmpPath ;
{
UINT    size = MAX_PATH ;
::GetTempPath    (size,tmpPath.GetBuffer(size)) ;
tmpPath.ReleaseBuffer() ;
}
CString    tmpSVG = tmpPath + CTime::GetCurrentTime().Format(_T(“%H%M%S.svg”)) ;
pDoc->save(LPCTSTR(tmpSVG)) ;
}
::CoUninitialize() ;
return    TRUE ;
}

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

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


XML の書出しテスト – 3

msxml.dll を利用して,点線の line を 5 本出力.
空の xmlns 属性が出来てしまうため,そのままでは表示されない.

<?xml version="1.0" encoding="utf-8" ?>
<!--SVG 出力テスト-->
<svg width="50%" height="50%" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
    <g xmlns="" stroke="red" stroke-width="0.3" stroke-dasharray="3 3">
        <line x1="0" x2="0" y1="10" y2="90" />
        <line x1="10" x2="10" y1="10" y2="90" />
        <line x1="20" x2="20" y1="10" y2="90" />
        <line x1="30" x2="30" y1="10" y2="90" />
        <line x1="40" x2="40" y1="10" y2="90" />
        </g>
    </svg>

xmlns="" の部分を削除すると表示可能.

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

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


XML の書出しテスト – 2

loadXML の部分を改良.

// pDoc->loadXML(_T(""< ?xml version=\"1.0\" encoding=\"utf-8\"?>"< r>"< /r>")) ;
// Source: dynamDOMsmart.cpp より
 MSXML::IXMLDOMProcessingInstructionPtr pi =
  pDoc->createProcessingInstruction(L"xml", L"version='1.0'  encoding='utf-8' ");
  pDoc->appendChild(pi);
// Create a comment for the document.
 MSXML::IXMLDOMCommentPtr pc =
  pDoc->createComment(L"sample xml file created using XML DOM object.");
  pDoc->appendChild(pc);
この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

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


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人のブロガーが「いいね」をつけました。