社本@元ネオニート Blog

社本@元ネオニート (元々ワック) のいたずら書き (for Programmers)

AILight Banner
AILight Blog

プロフィール

社本@元ネオニート Blog
働いたら負けかなと思っていたのですが。。とうとう働き始めました。アメリカのシアトル・エリアにある企業向けのバックアップソフトを開発している会社です。日本人は私だけ。なんとか。。やっていけてるようです。

目次

Blog 利用状況

記事分類

過去の記事

タグ

IDispatchImpl - ATL

#いつかATLを使わなくなったら確実に忘れそうなので、メモとして。。

ATLでは、IDispatchを実装するのに、IDispatchImplクラスを規定の実装として利用します。
いくつものテンプレート引数があるわけですが、このテンプレート引数のデフォルトがクセものです。
最後の2つが、タイプライブラリのバージョンを表すんですが、ここを以下のように指定しないと
自分自身(DLLやEXE)のリソースに格納しているタイプライブラリを直接ロードしてくれません。
タイプライブラリのバージョンを指定しなかった場合、レジストリを参照してタイプライブラリを
ロードすることになります。

IDispatchImpl<IHoge, &IID_IHoge, &CAtlModule::m_libid, 0xFFFF, 0xFFFF>,

一般論としては、自分自身のリソースに格納しているタイプライブラリから参照しなくても、
COMサーバをレジストリ登録する際、タイプライブラリもレジストリに登録するので問題ありません。
しかし、Windows XP以降のCOMのサイドバイサイド(SxS)を利用する場合には、レジストリに
依存しないようにする必要があります。

あー、タイプライブラリのこと、すっかり説明し忘れてた。。
ATLはMFCと異なり、実行時にタイプライブラリを必要とします。
MFCはマクロを使ってマップを記述させます。そのため、インターフェースの変更があると大変。。
#ATLの実装は、COMコミュニィティではモダンな実装と呼ばれているらしいw

■IDispatchImpl クラス - MSDN
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_atl_IDispatchImpl.asp

■Windows XP と Windows 2000 の COM の サイドバイサイド(SxS) の違い
http://www.ailight.jp/blog/sha256/archive/2005/03/17/5061.aspx

投稿日時 : 2005年3月22日 7:27


コメントを追加

タイトル
名前
URL
コメント