とっちゃん Microsoft MVP for Visual C++

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

わんくま同盟 東京勉強会 #10 オブジェクト指向 #1 Windows メッセージを使いこな す -Windows 流オブジェクト指向 - とっちゃん 高萩 俊行 Microsoft MVP for Windows SDK 2005/ /09.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
Windows HPC Server を使ってみる
DB(データベース)のおはなし 作成者:小野正広 DBと言っても、  ドラゴンボール ではないですぞ! 3/1/2017.
オブジェクト指向プログラミング(4) 静的分析(2)
プログラミング基礎I(再) 山元進.
Javaのための暗黙的に型定義される構造体
第5回 iPhoneアプリ開発勉強会 Objective-C 「継承とクラス」
COMを応用してExcelをコントロール
COMを応用してExcelをコントロール
データ構造とアルゴリズム 第10回 mallocとfree
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
情報伝播によるオブジェクト指向プログラム理解支援の提案
オブジェクト指向プログラミング(2) OOPの三大要素 「クラス」「ポリモーフィズム」「継承」
Solid Edge Customization with VB   (Fundamentals)
3-3 クラス図の関係その2.
クラス図(1) 後半 FM13010 村上 太一.
アルゴリズムとデータ構造 2011年6月13日
Androidソースコード公開後のJNI
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
UML入門 UML PRESS vol.1 より 時松誠治 2003年5月19日.
コンパイラの解析 (2) GCJのデータ構造 - 1.
第10回 2007年6月29日 応用Java (Java/XML).
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
Nakano School of Business 経営情報ビジネス科 【 Java概論(Test5)】
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
ゲーム開発モデルの基礎.
COM コンポーネント・オブジェクト・モデル.
Java8について 2014/03/07.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
物理的側面を表現する図 Chapter6 物理的側面を表現する図について徐研究室の大楠が発表します。 FM13005 大楠拓也 徐研究室.
XMLゼミ 3.5 DTD M2 正木 裕一.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
とっちゃん Microsoft MVP for Visual C++
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
マイグレーションを支援する分散集合オブジェクト
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
アルゴリズムとデータ構造 2012年6月11日
サブゼミ第7回 実装編① オブジェクト型とキャスト.
アルゴリズムとデータ構造1 2009年6月15日
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
18. Case Study : Imperative Objects
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2010年6月17日
ソフトウェア工学 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング 2 静的変数.
Presentation transcript:

とっちゃん Microsoft MVP for Visual C++ http://blogs.wankuma.com/tocchann/ COM そのもっとも深き場所 とっちゃん Microsoft MVP for Visual C++ http://blogs.wankuma.com/tocchann/

すべての始まり…IClassFactory どうやって構築するのか? IClassFactory へ至る道 今日のお題目 COM とは… すべての根源…IUnknown すべての始まり…IClassFactory どうやって構築するのか? IClassFactory へ至る道

COM とはComponent Object Model の略称である

英和辞書で調べてみました 語の持つ本質的な意味を コンピュータの影響を受けないように 我が家のもっとも古い辞書を使って 三省堂 COM とは… 語の持つ本質的な意味を コンピュータの影響を受けないように 我が家のもっとも古い辞書を使って 英和辞書で調べてみました 三省堂 改訂コンサイス英和新辞典 昭和9年1月20日 改訂80版

COM とは… 辞書で調べてみた! Component 成分;【理】分力. 組み立てる、構成する、合成の、成分的.

辞書で調べてみた! Object COM とは… 事物、物體、物件; 目的物、目標〔行為、感情などの〕(of or for); 目的、趣意; 【哲】客體、客観、封象; 【文】目的語〔他動詞または前置詞の〕 三省堂:改訂コンサイス英和新辞典 昭和9年1月20日 改訂80版

辞書で調べてみた! Model(n) Model(vt) COM とは… 模型、模範; 模型人、モデル; 典型、亀鑑; 模す、かたどる、模造す、準據す; 體形を與ふ、構成す〔文書、論議などに〕; 象り作る、倣い造る〔模型、設計図などより〕; 三省堂:改訂コンサイス英和新辞典 昭和9年1月20日 改訂80版

コンピュータ的意味は… Component Object Model COM とは… なんらか単位を基準とした塊 なんらかの存在を表すための塊 Model なんらかの型にはめた状態や状況

COM的意味は… Component Object Model COM とは… 差し替え可能な単位の基準 インターフェースという名称の塊 やりとりするための枠組み

実装に依存しない規約である! 実行可能コードである! 言語から独立している! バイナリで配布される! COMとは… 実行可能コードである! 言語から独立している! バイナリで配布される! 利用側に支障をきたすことなく アップグレードできる! 透過的に分散できる! 実装に依存しない規約である!

インターフェースを規定する 便宜的な名称を持つ 実体は関数テーブル インターフェースの識別子はGUIDを使う IHoge など すべての根源…IUnknown の前に… インターフェースを規定する インターフェースの識別子はGUIDを使う Inteface GUID IID 便宜的な名称を持つ IHoge など 実体は関数テーブル C++の仮想関数テーブルとほとんど全く同じ

3つのメソッドを持つインターフェース すべてのインターフェースの派生元 すべての根源…IUnknown 3つのメソッドを持つインターフェース すべてのインターフェースの派生元 HRESULT QueryInterface( REFIID, void** ); ULONG AddRef(); ULONG Release();

寿命は参照カウンタで管理する 不要になるタイミングを明示的に宣言 実装的意味の破棄は実装者の自由 すべての根源…IUnknown 寿命は参照カウンタで管理する オブジェクトを生成/取得するとカウントアップ 不要になるタイミングを明示的に宣言 使わなくなるときにカウントダウン 実装的意味の破棄は実装者の自由

すべてが QueryInterface に行きつく すべての根源…IUnknown インターフェースの問い合わせ 一種のキャスト .NET Framework のキャスト実装の礎 問い合わせにも明確な決まりがある 実装するので自由度が非常に高い すべてが QueryInterface に行きつく

QueryInetrface の規則 IUnknown は必ず一定(同じ参照先) 前に取得したインターフェースは取得可能 保持しているインターフェースは取得可能 元のインターフェースに戻ることが可能 あるインターフェースはどのインターフェースからも取得可能

すべての始まり…IClassFactory 実体を用意するためのインターフェース インスタンスを作成する HRESULT CreateInstance( IUnknown*, REFIID, void** ); モジュールロードの負荷低減機能 HRESULT LockServer( BOOL );

すべての始まり…IClassFactory インスタンスとなる単位(詳細不問) Factory 工場、すなわち作成する場所 クラスの識別は CLSID(Class GUID)で識別される 参照できるように実行環境に登録される

間接構築 直接構築 ちなみに… CoCreateInstance (Native API) CreateObject (VBA) どうやって構築するのか? 間接構築 CoCreateInstance (Native API) CreateObject (VBA) 直接構築 CoGetClassObject (Native API) GetObject ではないので注意!!! ちなみに… GetObjectは IRunningObjectTableのラップ

百聞は一見に如かず! 実際にコードを追ってみよう

まとめ COM とは… 言語に依存しない形で様々なやりとりを行うために作られた規約である

おぷしょん 実装の再利用:包合と集約 マルチスレッド:STA/MTA 実行時名前解決:IDispatch

包合 外側に見せているインターフェースはダミー 内側に別の実装を持ちそこに間接呼び出しする 包合と集約 包合 外側に見せているインターフェースはダミー 内側に別の実装を持ちそこに間接呼び出しする .NET でインターフェース実装の継承としてよく利用される

集約 別実装を外に直接見える形にして実装コストを減らす技術 COMであるからこそできる特殊な実装継承 包合と集約 集約 別実装を外に直接見える形にして実装コストを減らす技術 COMであるからこそできる特殊な実装継承 IUnknown は1つである必要があるため、集約する側は外側の IUnknown を提供しなければならない

Apartment Thread Apartment COMオブジェクトの住居 Win32 メッセージループがある場所(=スレッド) マルチスレッド Apartment COMオブジェクトの住居 Win32 メッセージループがある場所(=スレッド) ユーザーインターフェーススレッドと同義 Thread Apartment 住居スレッドへのアクセス方法の規定 COM では Thread Model と呼ぶ

Single Thread Apartment(STA) マルチスレッド Single Thread Apartment(STA) 特定のひとつからのみアクセスできる Apartment Thread Model Multi Thread Apartment(MTA) どこからでもアクセスできる Free Thread Model Both Thread Model(STA/MTA両対応)

IDL(Interface Definition Language) 実行時名前解決 IDL(Interface Definition Language) インターフェース定義言語 COM専用の場合、頭に M(Microsoft)がつく TLB(Type Library) 型ライブラリ IDLをビルドすると作成される .NET のメタデータテーブルの基礎となったもの

IDispatch VARIANT 動的に名前解決できるインターフェース 旧VB の遅延ロードの実体 実行時名前解決 IDispatch 動的に名前解決できるインターフェース 旧VB の遅延ロードの実体 VARIANT 任意のオブジェクトを保持できる万能変数型 現在保持しているオブジェクトの型を持つ