2006 年 7 月 16 日 22 時 34 分

仕上げ


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


[写真]


さて、今日で仕上げとしよう。

おさらいとして、ByteSizeColumn と同様、
LinkTargetColumn を多言語化する。手順は一緒だ。

まず、既定のリソースとして、
「LinkTargetColumn.resx」 を追加する。
内容は以下のとおりにしよう。

    title: 「Link Target」
    description: 「Target of the shortcut references.」
    size: 「40」(System.UInt32)

そして、日本語用のリソースとして、
「LinkTargetColumn.ja-JP.resx」 を追加する。
こちらの内容は以下のとおりにしよう。

    title: 「リンク先」
    description: 「ショートカットの示す先」

そして、ByteSizeColumn.cs を、
ResourceManager を使って書き直す。
まずは、静的フィールドの追加だ。

    // リソース
    private static ResourceManager _resource
            = new ResourceManager(typeof(LinkTargetColumn));

次に、ResourceManager を利用するコードだ。

    // カラムの情報を取得
    public override void GetInfo(out SHCOLUMNINFO psci) {
           
        // まずは既定の実装を呼び、
        base.GetInfo(out psci);

        // 固有分を補正
        psci.cChars = (uint)_resource.GetObject("size");
        psci.wszTitle = _resource.GetString("title");
        psci.wszDescription =_resource.GetString("description");
    }

中身はほとんど同じとなる。

さて、仕上げということなので、リリースビルドを行おう。
既定では /bin/Release フォルダ内に出力される。

このフォルダにはビルド時の中間ファイルなどは含まれず、
リリース先に配布するための構造となっているので、
このフォルダごと圧縮し、そのまま配布することができる。

残念ながら Java のように、JAR 等にまとめて、
アーカイブのままそのまま実行することはできないが、
通常のソフトウェアであれば、解凍してすぐに利用可能だ。

今回のプロジェクトはライブラリに相当し、
COM の相互運用のために登録が必要なので、
配布先で regasm コマンドを実行してもらう必要がある。

ちゃんとやるならば、インストーラを作成するのだが、
面倒なので、バッチファイルをつけることにしよう。

LoaferShellEx.dll のあるフォルダに register.cmd を作り、
以下のように一行書いて保存しよう。

%WINDIR%\Microsoft.NET\Framework\v1.1.4322\regasm LoaferShellEx.dll /codebase


では配布テストだ。
まずは、上記を圧縮して配布用ファイルを作り、
開発環境から DLL の登録を解除する。
例によってビルドエラーや、regasm を使えばよい。
そのあと、念のため再起動しておこう。

その状態でエクスプローラを開き、
カラムが利用できないことを確認する。

そして、上記リリースファイルを適当なフォルダに展開。
C:\Program Files\Loafer Column Shell Extension\ にする。

そしてその中にある、register.cmd を実行。
バッチファイルにより、登録が行われる。
この状態でエクスプローラを開き、
カラムが登録されていることを確認する。

写真は、英語版 OS での表示である。
もちろん、ja-JP のアセンブリも含まれているが、
カルチャが英語なので、既定のリソースが読み込まれている。


インタフェースの定義など、多少は手間はかかったが、
基本的な機能を持つものは完成した。
後は応用次第で色々なものが作れると思う。
興味のある方はぜひ試してほしい。


COM 開発に .NET のコアライブラリを使えるのは大きく、
従来の開発に比べて、非常に開発効率が良い。

まあ、C++ や VB のネイティブコードと比較すると、
どうしても速度面では多少不利とは言えるが、
.NET にはそれを補う仕組みはある。

例えば、ngen というツールを使えば、
アセンブリのコードの一部をネイティブコードに変換し、
キャッシュさせておき、実行速度を速めることができる。

また、Managed C++ と呼ばれる、Microsoft C++ の
言語拡張機能を使うと、C++ のネイティブコードの中で、
一部だけ .NET Framework を呼び出すこともできる。
この機能を使えば、殆どをネイティブコードで書けるので、
速度的な差はさらに小さいものになるだろう。

最近は Mono プロジェクトも成長してきており、
小さな規模のプログラム(アセンブリ)等なら、
Linux や Mac OS X でも動作するようにもなってきている。
(なんとアセンブリの .exe ファイルがそのまま使える)

今後、.NET はどのように成長していくのだろうか。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.