2006 年 11 月

2006 年 11 月に書いた日記。30 項目あります。

日記の概要

レジストリへの登録
COM サーバをレジストリに登録し、実際にアイコンが表示されるかどうか試してみよう。レジストリへの登録内容は昨日書いたとおり …… (30日 23:41)
スレッディングモデル
インプロセスサーバの DLL が完成しても、そのままでは COM 基盤はその存在を知る事ができない。そこで、COM 基盤からサーバを …… (29日 23:56)
DllGetClassObject の実装
さて、やっと DllGetClassObject を実装する準備が整った。現時点で公開するクラスは HardLinkIconID だけであり、DllGetClassO …… (28日 23:58)
クラス ID の割り当て
クラスオブジェクトが完成した。これをクライアントに公開するためには、クラスに一意のクラス ID を割り当てる必要がある。これ …… (27日 23:48)
多重継承の問題点
HardLinkIconID のインスタンスの作成ができないのは、HardLinkIconID の定義が完全でないため、具象クラスになることができな …… (26日 22:28)
HardLinkIconIDClass クラス
HardLinkIconID クラスをクライアントに公開するためには、専用のクラスオブジェクトを作成する必要がある。クラスオブジェクト …… (25日 21:53)
DllCanUnloadNow への対応
DllCanUnloadNow に対応するには、サーバ単位でインスタンスの参照を数えておく必要がある。参照の確認には、AddRef と Release …… (24日 23:56)
IClassFactory インタフェース
クラスオブジェクトは、その一般的な機能を提供するために、IClassFactory インタフェースを実装することが推奨される。IClassFa …… (23日 23:37)
サーバから見たインスタンスの作成
インプロセスサーバがクラスを提供するためには、DLL に DllGetClassObject 関数を実装する必要がある。この関数は以下のような …… (22日 23:54)
クライアントから見たインスタンスの作成
これまでは、COM クラスの実装や利用について書いていたが、肝心のインスタンスの作成に関しては説明していなかった。COM クライ …… (21日 23:59)
DLL の初期化とグローバル変数
昨日未解決にしていた DLL のハンドルは、どこから取ってくることができるのか。インプロセスサーバに限らず、一般的な Windows …… (20日 23:52)
HardLinkIconID クラス
昨日作ったアイコンを使って、ハードリンク用のアイコンを表すクラスを作ってみる。クラス名は「HardLinkIconID」とする。IUnkno …… (19日 20:58)
アイコンの作成
次に行う作業は、表示させるアイコンの作成である。今回は、以下の 3 種類のアイコンを表示させる予定である。・ハードリンク・ …… (18日 23:54)
基本ヘッダとソースファイルの作成
早速アイコンを提供するクラスを実装…と行きたい所だが、先にプロジェクトに下準備をしておく必要がある。ちょっと前に、DLL の …… (17日 23:40)
IShellIconOverlayIdentifier インタフェース
そろそろ本題も進めていきたいので、実際に使うインタフェースを取り上げてみよう。シェルに独自の重ね合わせアイコンを提供する …… (16日 23:02)
サーバから見た IUnknown(後編)
保留にしていた QueryInterface の実装を考えて見よう。IUnknown の最大の山場が QueryInterface である。クライアント側がイン …… (15日 23:46)
サーバから見た IUnknown(前編)
サーバ側はクラスの実装を提供する必要がある。C++ クラスに IUnknown インタフェースを実装すると、COM によって操作可能なクラ …… (14日 23:58)
クライアントから見た IUnknown
IUnknown の定義を再度引用しておこう。class IUnknown {public:    virtual HRESULT STDMETHODCALLTYPE QueryInt …… (13日 21:53)
クラスとインタフェース
COM はクライアントサーバシステムであるため、クラスの設計について、特殊なルールを定めている。それは、実装側と利用側を明確 …… (13日 0:21)
インプロセスサーバ = DLL + DllGetClassObject
COM サーバの開発には、Visual Studio を使う事が多い。Visual Studio で COM と言うと、MFC や ATL などの高度なライブラリを …… (11日 23:55)
シェルエクステンションと COM サーバ
シェルエクステンションは、以前に取り上げたが、そのときは、C# を使って高水準のプログラミングを行った。今回は C++ を使い …… (10日 23:56)
エクスプローラの重ね合わせアイコン
エクスプローラではファイルやフォルダをアイコンで視覚的に表示することができる。エクスプローラのアイコン表示は、基本となる …… (9日 23:54)
ノートパソコンの掃除
今日、久しぶりにパソコンの掃除を行った。ここ半年くらい放りっぱなしだったので。ノートパソコンでは、キーボードが最も汚れや …… (8日 23:59)
Vista のシンボリックリンク
次世代の Windows OS となる、Windows Vista や、Longhorn Server(コードネーム)では、いよいよ真のシンボリックリンクが登場 …… (7日 23:48)
マウントポイントの長所と短所
マウントポイント機能は、使い方次第では非常に便利である。ディスクを複数のパーティションに分けている場合、システムドライブ …… (6日 23:55)
ディレクトリジャンクションを作成する
今日はディレクトリジャンクションを作成してみる。そのものズバリの API は存在しないので、リパースデータバッファを自分で用 …… (5日 23:56)
ディレクトリジャンクション
パス名で何日か脱線していたが、改めてボリュームマウントポイントに戻ろう。ボリュームマウントポイントは、ファイルシステムの …… (4日 23:45)
色々なファイルパスを試してみる
実際に拡張表現を試してみよう。サンプルとして、Windows フォルダ内にある、win.ini にアクセスしてみよう。エクスプローラの …… (3日 16:50)
ファイルパスの拡張表現
いよいよ、保留にしていたパスについて考えてみる。GetVolumeNameForVolumeMountPoint が返却したパスは、以下のような形式であ …… (2日 22:39)
ファイルのパス表現
昨日のもう 1 つのパスはもう少し保留しておき、ファイルのパス表現について考えてみよう。パソコン利用者やプログラマに単に「 …… (1日 23:55)


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