COMの背景知識 - プログラムの実行環境

いちごパック > COM/ActiveXの解説 > COMの背景知識 - プログラムの実行環境

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の解説ページ 目次
  • 次の項目: プログラムの実行処理