Iwao Dev

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

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

2012 / 1月

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="" の部分を削除すると表示可能.



  にほんブログ村 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);



  にほんブログ村 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;
}



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


Windows Mobile 配置 0x8973190e

エミュレータや実機にコピーのタイミングで,以下のエラー

—— 配置開始: プロジェクト: Test, 構成: Debug Any CPU ——
次のエラーにより配置または登録に失敗しました: 0x8973190e. ファイル ‘%CSIDL_PROGRAM_FILES%\Test\Test.exe’ の書き込み中にエラーが発生しました。エラー 0x80070020: プロセスはファイルにアクセスできません。別のプロセスが使用中です。
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
========== 配置: 0 正常終了、1 失敗、0 スキップ ==========

それぞれのエクスプローラで,対象の exe を削除して対応.



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


DocTh.exe 2011.01.18 0xc0000374

Win7 環境のイベントビューアを見ていたら,エラーがいっぱい.

障害が発生しているアプリケーション名: DocTh.exe、バージョン: 1.10.2012.120、タイム スタンプ: 0x4f16d6f9
障害が発生しているモジュール名: ntdll.dll、バージョン: 6.1.7601.17725、タイム スタンプ: 0x4ec49b8f
例外コード: 0xc0000374
障害オフセット: 0x000ce6c3
障害が発生しているプロセス ID: 0x21cc
障害が発生しているアプリケーションの開始時刻: 0x01ccd71a3cef9b75
障害が発生しているアプリケーション パス: C:\Users\Iwao\AppData\Local\Temp\…\Project\DocTh\Release.060\DocTh.exe
障害が発生しているモジュール パス: C:\Windows\SysWOW64\ntdll.dll
レポート ID: 8e3b520d-430d-11e1-8bec-00219b51e933


AP 終了時に発生しているが,Win7 環境では,特に何も表示されない.
単純に exe を起動して,何もせず終了してもエラーが記録される.
同じ操作を,開発環境の XP で実行してもエラーにはならない.
また,デバッグ版 exe も問題ない.
他にもいろいろやったが,省略.
WinXP で,ドキュメントをドロップして終了でエラーが発生.

結局,原因は VC 6 でのビルド時の依存関係と思われるが,リビルドで解決.


この exe ではあまり意味はないが,Profile::SetPathINI() を利用しているので,これが原因かと思った.
  BOOL Profile::SetPathINI (void)
  {
    CWinApp* app = AfxGetApp() ;
    if (app == NULL) { return FALSE ; }
    CString nowINI = app->m_pszProfileName ;
    if (nowINI.Find(_T(“\\”)) > 0) {
      nowINI = GetFileName(nowINI) ;
      }
    CString newINI = Profile::CheckAndChangeINI(nowINI) ;
    free((void*)app->m_pszProfileName) ;
    app->m_pszProfileName = _tcsdup(newINI) ;
    return TRUE ;
    }
CWinApp::m_pszProfileName


i_Tools



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


HBITMAP から画像サイズ取得

昨日,クリップボードからの取得で画像サイズを求める方法がわからなかった.
  HBITMAP hbm = (HBITMAP)::GetClipboardData(CF_BITMAP) ;
  if (hbm != NULL) {
    CSize bmpSize(10,10) ;
    {
      BITMAP bm ;
      ::ZeroMemory(&bm,sizeof(BITMAP)) ;
      if (::GetObject(hbm, sizeof(BITMAP),&bm)!=0) {
        bmpSize.cx = bm.bmWidth ;
        bmpSize.cy = bm.bmHeight;
        }
      }
    …
    }
CBitmap で保持している場合は,
  CBitmap bitmap ;
  if (bitmap.LoadBitmap(bmp_ID)) {
    BITMAP bm ;
    bitmap.GetBitmap(&bm) ;
    CRect rect = CRect(0,0,bm.bmWidth,bm.bmHeight) ;
    …
    }
HENHMETAFILE では,
  HENHMETAFILE hemf = (HENHMETAFILE)::GetClipboardData(CF_ENHMETAFILE) ;
  if (hemf !=NULL) {
    ENHMETAHEADER emh ;
    ZeroMemory(&emh,sizeof(ENHMETAHEADER)) ;
    emh.nSize = sizeof(ENHMETAHEADER) ;
    if (::GetEnhMetaFileHeader(hemf,sizeof(emh),&emh) != 0) {
      CRect rectB ;
      rectB.top = emh.rclBounds.top ;
      rectB.left = emh.rclBounds.left ;
      rectB.right = emh.rclBounds.right ;
      rectB.bottom= emh.rclBounds.bottom ;
      CRect rectF ;
      rectF.top = emh.rclFrame .top ;
      rectF.left = emh.rclFrame .left ;
      rectF.right = emh.rclFrame .right ;
      rectF.bottom= emh.rclFrame .bottom ;
      }
    }



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



    top

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