COMの実行環境
COM(Component Object Model)はWindowsで使われるプログラミングインターフェースです。
32bit版,64bit版のWindowsで利用できます。
この解説ページでは、特に断らない限りWindows XP以降を対象とします。
COMはプログラミング言語に依存しないよう設計されていますが、
C++をベースにしています。
この解説ページでは、主にC++言語を利用し、適宜スクリプト言語を利用しながら解説していきます。
また、C++のコンパイラとしては32bit/64bitに対応したVisual C++を利用します。
プロセスとスレッド
Windowsでは、実行プログラムをプロセスとして起動し、
各プロセスに1つ以上のスレッドを割り当てます。
各プロセスには独立したメモリやハンドルが割り当てられます。プロセス内の全スレッドはこれらを共有します。
各スレッドにはスレッド固有のデータが割り当てられます。
プロセス間でのデータのやりとり
デバッガなど特別なプロセスを除き、
各プロセスは他のプロセスのメモリに直接アクセスすることはできません。
プロセス間でデータをやりとりするには、例えば次のようなOSの通信機能を利用します。
ファイル | CreateFile(), ReadFile(), WriteFile(), CloseHandle() など |
RPC (Remote Procedure Call) | 関数呼び出しをツール MIDL により自動生成 |
ウィンドウメッセージ | PostMessage(), GetMessage(), DispatchMessage() など |
ネットワークソケット | socket(), send(), recv() など |
クリップボード | OpenClipboard(), SetClipboardData(), GetClipboardData() など |
COMは主にRPCとウィンドウメッセージを利用します。
複数スレッドによるデータの同時アクセス
プロセス内のデータは、複数のスレッドで共有されます。
共有データを同時にアクセスすると、データが破損されることがあります。
データの破損を防ぐには、例えば次の機能を利用します。
OSの通信機能 | 先の表を参照 |
クリティカルセクション | InitializeCriticalSection(), EnterCriticalSection(), LeaveCriticalSection() など |
ミューテックス | CreateMutex(),ReleaseMutex(),WaitForSingleObject() など |
セマフォ | CreateSemaphore(), ReleaseSemaphore(), WaitForSingleObject() など |
関連ページ
COM/ActiveXの解説ページ 目次
次の項目: プログラムの実行処理