ページ

2012年5月24日木曜日

[MetroStyle] WinRT に Jet API なんてあったのか

先日の記事へのコメント で WinRT に Jet API があると教えてもらいしました。
へぇ、確かにリファレンスに載ってますね。
Win32 and COM for Metro style apps (data)
けど、これ、「メトロスタイルアプリでサポートされている」 と書かれてますが、どう使ったらいいのかさっぱりわかりません。Jet API のリファレンス自体は既存のものをコピペしただけみたいで Vista とか Windows 2000 とか書かれたままですし、.h と .lib が書かれているだけで namespace とかなんにもないのでマネージドから使える気がしません。これって、DirectX が C++ からしか使えない(マネージドから使いたいときはラッパーを自分でどうにかする必要がある) のと同じように C++ からなら使えるってことなんですかね?

ライブラリーの名前が ESENT.dll となってますが、ESENT っていうのは Extensible Storage Engine のことで、Jet Blue と呼ばれることもある Jet の拡張版みたいなものらしいです。ESENT 自体は Active Directory や Windows Desktop Search、Windows Mail、Live Mesh、Windows Update などで使われているそうです。

で、ちょっと検索してみたら
Making ESENT / Jet APIs work in Metro-style apps
こんな記事を見つけました。
ESENT をメトロスタイルアプリ(C#)で使ってみたという記事です。
どうやら、CodePlex にある ManagedEsent (名前のとおり ESENT.dll をラップしてマネージドから使えるようにしたもの) を使ったら ManagedEsent のサンプルコードがほとんどそのままメトロスタイルアプリでも使えたってことのようです。
やっぱり、ESENT.dll はそのまま使えるのは C++ からで、マネージドから使いたいときはラッパーを自分でなんとかする必要があるみたいですね。

けど、サンプルコードとか見てもこの ESENT.dll ってあまり使い勝手はよさそうではないなぁ。ManagedEsent には IDisposable を実装して using を使えるようにしたクラスとかも用意されているようですが、それでもあまり気軽に使えるっていう感じではなさそう。
もともと、ローカルにちょっとしたデータを保存するのに便利なものはないかと思ってたんですが、これなら永続化可能なクラスを読み書きしたり、XElement 属あたりを使って XML を読み書きしたりした方が楽そう。(わざわざ WinRT で ESENT.dll を使えるようにしたのは、Windows 8 標準のメールアプリや SkyDrive アプリなんかで使いたかったからかなぁ。Windows Mail や Live Mesh が ESENT を使っているそうなので、そんな感じがする)

0 件のコメント:

コメントを投稿