2012年12月21日金曜日

タスク イメージ破損、特定用ソフトのご紹介

「タスク イメージは破損しているか、または変更されています
 (HRESULTからの例外:0x80041321) 」
 

破損タスクを探すソフトを開発致しました。

FindBrokenTasks
http://code.google.com/p/kumpro/downloads/list?can=2&q=FindBrokenTasks

Subversionのレポジトリにて、ソースコードも提供しています:
https://kumpro.googlecode.com/svn/trunk/FindBrokenTasks

セットアップを完了し、起動します。問題有りの場合は次のような画面に:


「例外情報」 開発者視点のエラーメッセージを表示致します。
「デスクトップへ複製する」 問題のタスクファイルをデスクトップへ複製します。
「デスクトップへ移動する」 問題のタスクファイルをデスクトップへ移動します。

問題なしの場合は、次のようになります。

2012年12月15日土曜日

Mail.MSMessageStore 解析資料

Mail.MSMessageStore の仕様を独自に解析してみました。

解析資料

データベースには ESE (Extensible Storage Engine) が採用されています。ISAM 形式です。
Outlook Express のデータベースのような 2GB 境界で壊れやすい仕様・実装ではなく、かなり信頼性の高いコンポーネントです。

ESE データベースを閲覧・編集する良い塩梅のソフトがなかなか見つからなくて、作りました。eseViewer です。


Mail.MSMessageStore テーブル一覧:
  • DirtyQueue
  • Folders
  • Junk
  • Messages
  • Offline
  • SearchFolder
  • ServerOperation
  • Streams
  • Uidl
  • UserDataTable

Foldersの中身例:

Messagesの中身例:

2012年12月5日水曜日

Apache OpenOfficeビルド: libxsltでlibxml/xmlversion.hが見つからない

Apache OpenOffice 3.4.1のビルド中に遭遇したエラーです。

=============
Building module libxslt
=============

Entering /home/KU/8/aoo-3.4.1/main/libxslt


Microsoft(R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

        cl.exe /nologo /D "WIN32" /D "_WINDOWS" /D "_MBCS" /W3 /MD /D "_REENTRANT" /I.. /I..\libxslt /I.\include /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE /D "NDEBUG" /O2 /Foint.xslt.msvc\ /c ..\libxslt\attributes.c ..\libxslt\documents.c ..\libxslt\extensions.c ..\libxslt\extra.c ..\libxslt\functions.c ..\libxslt\imports.c ..\libxslt\keys.c ..\libxslt\namespaces.c ..\libxslt\numbers.c ..\libxslt\pattern.c ..\libxslt\preproc.c ..\libxslt\security.c ..\libxslt\templates.c ..\libxslt\transform.c ..\libxslt\variables.c ..\libxslt\xslt.c ..\libxslt\xsltlocale.c ..\libxslt\xsltutils.c ..\libxslt\attrvt.c
attributes.c
..\libxslt\win32config.h(92) : fatal error C1083: include ファイルを開けません。'libxml/xmlversion.h': No such file or directory
documents.c
..\libxslt\win32config.h(92) : fatal error C1083: include ファイルを開けません。'libxml/xmlversion.h': No such file or directory
extensions.c
..\libxslt\win32config.h(92) : fatal error C1083: include ファイルを開けません。'libxml/xmlversion.h': No such file or directory

簡単な直し方がわからなかったので、libxslt\makefile.mkを編集しました。

CONFIGURE_DIR=win32
CONFIGURE_ACTION=cscript configure.js
#CONFIGURE_FLAGS=iconv=no sax1=yes
CONFIGURE_FLAGS=include=../../../../../../libxml2/wntmsci12.pro/inc lib=../../../../../../libxml2/wntmsci12.pro/lib

一番下のCONFIGURE_FLAGSを足しました。

更に、libxslt\wntmsci12.pro\misc\build\so_configured_so_libxsltを削除して、configure.jsを再実行できるようにします。

これでビルドしたら成功しました。

美しくない解決法ですが、取り敢えず直りました。しかし、きれいな直し方がわからないのが残念です。

Apache OpenOffice: embedservでatls.libを取り込みしない件

Apache OpenOfficeのビルドで、
ATL_LIBやATL_INCLUDEを正しく設定しているにも関わりませず、
次の様なビルドエラーになる場合が有ります。

Making:    emser.dll
Microsoft (R) Windows (R) Resource Compiler Version 6.1.7600.16385
Copyright (C) Microsoft Corporation.  All rights reserved.

Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/MAP /OPT:NOREF -safeseh -nxcompat -dynamicbase -NODEFAULTLIB -RELEASE -DEBUG -INCREMENTAL:NO /SUBSYSTEM:CONSOLE /DLL -out:../wntmsci12.pro/bin/emser.dll -map:../wntmsci12.pro/misc/emser.map -def:../wntmsci12.pro/misc/emser.def -implib:../wntmsci12.pro/lib/emserimp.lib ../wntmsci12.pro/slo/emser_version.obj ../wntmsci12.pro/slo/register.obj ../wntmsci12.pro/slo/servprov.obj ../wntmsci12.pro/slo/docholder.obj ../wntmsci12.pro/slo/ed_ipersiststr.obj ../wntmsci12.pro/slo/ed_idataobj.obj ../wntmsci12.pro/slo/ed_ioleobject.obj ../wntmsci12.pro/slo/ed_iinplace.obj ../wntmsci12.pro/slo/iipaobj.obj ../wntmsci12.pro/slo/guid.obj ../wntmsci12.pro/slo/esdll.obj ../wntmsci12.pro/slo/intercept.obj ../wntmsci12.pro/slo/syswinwrapper.obj ../wntmsci12.pro/slo/tracker.obj isal.lib icppu.lib icppuhelper.lib ole32.lib gdi32.lib uuid.lib oleaut32.lib msvcrt.lib uwinapi.lib kernel32.lib user32.lib oldnames.lib stlport_vc71.lib ../wntmsci12.pro/misc/emser.res
   ライブラリ ../wntmsci12.pro/lib/emserimp.lib とオブジェクト ../wntmsci12.pro/lib/emserimp.exp を作成中
esdll.obj : error LNK2019: 未解決の外部シンボル "class ATL::CAtlComModule ATL::_AtlComModule" (?_AtlComModule@ATL@@3VCAtlComModule@1@A) が関数 "public: long __thiscall ATL::CComModule::Init(struct ATL::_ATL_OBJMAP_ENTRY30 *,struct HINSTANCE__ *,struct _GUID const *)" (?Init@CComModule@ATL@@QAEJPAU_ATL_OBJMAP_ENTRY30@2@PAUHINSTANCE__@@PBU_GUID@@@Z) で参照されました。
esdll.obj : error LNK2019: 未解決の外部シンボル "unsigned int (__stdcall* ATL::g_pfnGetThreadACP)(void)" (?g_pfnGetThreadACP@ATL@@3P6GIXZA) が関数 "unsigned int __stdcall ATL::_AtlGetConversionACP(void)" (?_AtlGetConversionACP@ATL@@YGIXZ) で参照されました。
esdll.obj : error LNK2019: 未解決の外部シンボル __imp__RegDeleteKeyA@8 が関数 "public: long __thiscall ATL::CRegKey::DeleteSubKey(char const *)" (?DeleteSubKey@CRegKey@ATL@@QAEJPBD@Z) で参照されました。
esdll.obj : error LNK2019: 未解決の外部シンボル __imp__RegDeleteValueA@8 が関数 "public: long __thiscall ATL::CRegKey::DeleteValue(char const *)" (?DeleteValue@CRegKey@ATL@@QAEJPBD@Z) で参照されました。
esdll.obj : error LNK2019: 未解決の外部シンボル __imp__RegCloseKey@4 が関数 "public: long __thiscall ATL::CRegKey::Close(void)" (?Close@CRegKey@ATL@@QAEJXZ) で参照されました。
esdll.obj : error LNK2019: 未解決の外部シンボル __imp__RegCreateKeyExA@36 が関数 "public: long __thiscall ATL::CRegKey::Create(struct HKEY__ *,char const *,char *,unsigned long,unsigned long,struct _SECURITY_ATTRIBUTES *,unsigned long *)" (?Create@CRegKey@ATL@@QAEJPAUHKEY__@@PBDPADKKPAU_SECURITY_ATTRIBUTES@@PAK@Z) で参照されました。
esdll.obj : error LNK2019: 未解決の外部シンボル __imp__RegOpenKeyExA@20 が関数 "public: long __thiscall ATL::CRegKey::Open(struct HKEY__ *,char const *,unsigned long)" (?Open@CRegKey@ATL@@QAEJPAUHKEY__@@PBDK@Z) で参照されました。
esdll.obj : error LNK2019: 未解決の外部シンボル __imp__RegSetValueExA@24 が関数 "public: long __thiscall ATL::CRegKey::SetDWORDValue(char const *,unsigned long)" (?SetDWORDValue@CRegKey@ATL@@QAEJPBDK@Z) で参照されました。
esdll.obj : error LNK2019: 未解決の外部シンボル __imp__RegQueryInfoKeyA@48 が関数 "protected: int __thiscall ATL::CRegParser::HasSubKeys(struct HKEY__ *)" (?HasSubKeys@CRegParser@ATL@@IAEHPAUHKEY__@@@Z) で参照されました。
esdll.obj : error LNK2019: 未解決の外部シンボル __imp__RegEnumKeyExA@32 が関数 "public: long __thiscall ATL::CRegKey::RecurseDeleteKey(char const *)" (?RecurseDeleteKey@CRegKey@ATL@@QAEJPBD@Z) で参照されました。
esdll.obj : error LNK2019: 未解決の外部シンボル "class ATL::CAtlBaseModule ATL::_AtlBaseModule" (?_AtlBaseModule@ATL@@3VCAtlBaseModule@1@A) が関数 "public: long __stdcall ATL::CAtlModule::UpdateRegistryFromResourceS(char const *,int,struct ATL::_ATL_REGMAP_ENTRY *)" (?UpdateRegistryFromResourceS@CAtlModule@ATL@@QAGJPBDHPAU_ATL_REGMAP_ENTRY@2@@Z) で参照されました。
../wntmsci12.pro/bin/emser.dll : fatal error LNK1120: 外部参照 11 が未解決です。
dmake:  Error code 96, while making '../wntmsci12.pro/bin/emser.dll'

1 module(s):
        embedserv
need(s) to be rebuilt

WINDOWS_VISTA_PSDKを定義し、適当な値を設定しましょう。

winenv.set.shファイルの中程に行を追加します。

WINDOWS_VISTA_PSDK=aaa

export WINDOWS_VISTA_PSDK=aaa

winenv.set.shの中に入れてもunsetされることが分かりました。都度、環境変数を作りましょう。

さて、atls.libを含まない事がビルドエラーの原因と考えられます。

embedserv\util\makefile.mkを確認しますと、WINDOWS_VISTA_PSDKの内容有無で判断するようになっています。

.IF "$(WINDOWS_VISTA_PSDK)"!=""
SHL1STDLIBS+=\
  $(ADVAPI32LIB) \
  $(ATL_LIB)$/atls.lib
.ENDIF # "$(WINDOWS_VISTA_PSDK)"!=""

C:/cygwinc:/cygwinの件

Apache OpenOffice/LibreOfficeのビルドエラーで、
C:/Cygwinc:/cygwinの文言が出現する場合が有ります。

[ build RES ]
awk: fatal: can't open source file `C:/cygwinc:/cygwin/home/KU/8/aoo-3.4.1/main/solenv/gbuild/processdeps.awk' for reading (No such file or directory)
C:/cygwin/home/KU/8/aoo-3.4.1/main/solenv/gbuild/WinResTarget.mk:59: recipe for target `/home/KU/8/aoo-3.4.1/main/solver/341/wntmsci11.pro/workdir/WinResTarget/comphelper/default.res' failed
make: *** [/home/KU/8/aoo-3.4.1/main/solver/341/wntmsci11.pro/workdir/WinResTarget/comphelper/default.res] Error 2
dmake:  Error code 2, while making 'all'

LINK : fatal error LNK1181: 入力ファイル 'isal.lib' を開けません。

Apache OpenOfficeの場合、winenv.set.shを編集します。
LibreOfficeの場合、Env.Host.shを編集します。

C:/cygwinc:/cygwinに置き換えます。最初のCを小文字のcにします。

C:\\cygwinc:\\cygwinに置き換えます。これも同様です。

書き換えた後、sourceを再実行する事をお忘れなく!

source winenv.Set.sh

これだけでビルドがすっきり通るようになると思います。