簡単な COM クライアントの実装
それでは、前節で作成した COM コンポーネントを利用するプログラムを書きましょう。 COM コンポーネントを利用するプログラムは、COM のクライアントなどと言います。
前節では ICar インターフェイスの Run メソッドや Stop メソッドを定義し、実装しました。 それらはどうやって呼び出せばよいのでしょうか?
COM のメソッドの呼び出し方
ここでは COM クライアントの詳細をおいておき、作ったばかりの ICar インターフェイスをどのように呼び出すのか具体的にみてみましょう。
個々の呼び出しについては後ほど説明します。
次のコードを carclient1.cpp として保存してください。
#include <stdio.h> #include "..\car\Car.h" void Test() { HRESULT hr; hr = ::CoInitialize(NULL); if(FAILED(hr)){ printf("CoInitialize Failed.\n"); return; } ICar* pICar = NULL; hr = CoCreateInstance( __uuidof(Car), NULL, CLSCTX_ALL, __uuidof(ICar), (void**)&pICar); if(SUCCEEDED(hr)) { pICar->Run(); pICar->Release(); } else { printf("CCI Failed. %p\n", hr); } ::CoUninitialize(); } int main() { Test(); return 0; }
Car.h ヘッダファイルをインクルードしています。これは前節までに作成した COM コンポーネントを作ったときに MIDL コンパイラが生成したものです。
この他、ヘッダファイルをインクルードする代わりにタイプライブラリをインポートする方法もあります。
#import "..\car\Car.tlb" no_namespace
タイプライブラリを使ったほうがいいことがあるので、そちらのほうが良いのですが、ここではまずはオーソドックスに ヘッダファイルを読み込んでいます。(タイプライブラリの方法はまた後ほど)
main 関数からは Test という関数を呼び出しています。Test 関数の中で、COM の呼び出しを行っています。
上記コードをビルドして EXE ファイルを作り実行すれば、COM メソッドが呼び出せたことがわかるはずです。
ビルドする際、ole32.lib をリンクするのを忘れないようにしてください。
実行したときに次のように表示されれば OK です。
> carclient1.exe Run! >
次のような表示になってしまった場合は、COM を登録するのを忘れています。
> carclient1.exe CCI Failed. 80040154 >
この場合は regsvr32 コマンドで COM を登録してください。
« 前の記事 | 次の記事 » | |
簡単な COM コンポーネントの実装 | COM プログラミング入門 目次 |