COMAPIを呼び出すための準備

GoogleEarth?のCOMAPIを呼ぶには,呼び出し側の外部プログラムにCOMのインターフェースを実装する必要がある.開発者が一からコーディングすることは非常に困難であるので,インターフェース用のコードを簡単に得る方法を示す.外部プログラムでどんなネイティブ言語を使うのかにもよるが,大きく分けて2つのやり方がある.

  • earth.idlをIDLコンパイラでコンパイルする
  • COMを解析できるツールでgoogleearth.exeの外部API公開部分を直に解析する

どちらも一長一短であるので,両者の具体的な流れを順に以下に示す.なお,私の主な開発環境に基づいてC/C++を前提にしている.VB, Java,Ruby,PHPといった他のネイティブ言語でも同様のことができるので,必要であれば調べてほしい.

方法1:IDLファイルのコンパイル

IDLとはInterfaceDefinitionLanguage?の略でインターフェースの構造を記述することを目的とした言語である.GoogleEarth?のCOMインターフェースはearth.idlというIDLファイルとして配布されているので,これをまず手に入れる.

次にネイティブ言語に応じてearth.idlをコンパイルする.MicrosoftからはIDLコンパイラとしてmidl.exeが配布されている.PlatformSDKに含まれているコンポーネントなのでSDKごとインストールすることを勧める.omniORBやらidljなどもIDLコンパイラだが,こちらはCORBAというCOMとは別の規約のものであるから注意する. パスやらなんやらを通したあと以下のコマンドでコンパイルが行われる.

midl.exe earth.idl

非常に簡単である.オプション無しでコンパイルするとC/C++用のコードが生成される(私は試していないが,オプション追記によりVC,VB,C#等用のコードも生成できるかもしれない).生成されるファイルは以下の通り.

  • earth_h.h
  • earth_i.c
  • earth_p.c
  • dlldata.c

上記のうち,earth_p.cおよびdlldata.cはdll作成用のスタブファイルだとか.私はWindowsプログラマーではないのでわかりません.必要なのは,earth_h.h(COMインターフェースのC/C++記述)とearth_i.c(各COMAPIのIIDおよびCLSIDの宣言)である.これらをリンク(VisualStudio?で言えばプロジェクトに追加)すれば,自作のメインコードでCOMAPIを呼び出すことができる.

方法2:googleearth.exeの解析

MFCがCOM準拠バイナリの解析機能を有しているので,それを使うことでネイティブ言語用のコードを生成することができる.ただしこの方法は上記で述べたIDLファイルのコンパイルに対して以下の点で異なるので,必要に応じてどちらかを選ぶとよい.

  • MFCは有償であるのに対して,IDLコンパイラmidl.exeは無償
  • MFCを使うのでVisualStudio?依存になり,かつWindowプログラミングを余儀なくされる
  • 同じCOMAPIの呼び出すのでも両者で命令が異なる

C/C++ではなくJavaをネイティブ言語とする場合は,com4jパッケージを使うことによりMFCと同様の機能を実現可能である.com4jは無償かつIDEに依存しないので,こちらを使うのも1つの手だ.コード生成の手順は以下の通り.

  • VisualStudio? -> プロジェクト -> クラスの追加 -> MFC -> TypeLib?からのMFCクラス
  • 続く設定ウィンドウでにて,レジストリでGoogleEarth1.0TypeLibrary?を選択するか,ファイルでgoogleearth.exeを直に指定
  • インターフェースダイアログに生成可能なインターフェースクラスが列挙されるので必要なクラスを指定して生成する(何も考えずに全部生成してもよい)

これで,プロジェクトにCApplicationGE(earth.idlにおけるIApplicationGEに対応)などのクラスが追加されるので,宣言されているメソッドを呼ぶことでCOMAPIを呼び出す.ただし,この方法で生成されたコードにはCOMAPIのIIDやCLSIDの宣言が含まれていないため,earth.idlや上述のearth_i.cから必要な部分を取り出して追加する必要がある.特にテクニカルなことをしないのならば,ApplicationGEに関するIIDとCLSIDで十分である(アニメーションの時刻設定をする場合にはTimeIntervalGEに関するIID,CLSIDも必要.詳細はアニメーション時刻の設定ができないんだけど??にて述べる).


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-02-23 (火) 19:03:47 (5174d)