Component Object Model - Microsoftが提唱する(していた)、ソフトウェア資産再利用のための技術。美しく厳格なオブジェクト指向の世界を追及していたようであるが、そのためにややこしくなって凡人はついていけなくなり、フェードアウトしつつある・・・という認識でいいのだろうか?

時代遅れなのかもしれないが、オートメーションはなんだかんだで便利だし、DirectXも大部分はCOMで実装されているみたいだし、後継の.NETもCOMベースの技術だそうなので、ちょっとやってみることにした。ヘルプや解説Webページを見るもわけがわからず、ムカつく日々を過ごしていたが、腰を据えて勉強してみると意味や意義がおぼろげに捉えられてきた。

*IDL [#w88c3e3a]
インターフェースを宣言するファイル。

**引数の省略 [#k6d7570b]
[[COMプログラミング:http://www.ops.dti.ne.jp/~allergy/com/com.html]]というページの記述通りなのだが一応メモ。

引数の宣言にoptionalを入れると、その引数は省略可能となった。私はDWORD値にoptionalを加えてみたが、省略するとゼロが入るようであり、上記ページと同様であった。

**引数の変更 [#z14f097f]
シンプルオブジェクトをウィザードから追加し、またそのメソッドもウィザードで追加した状況を考える。その後に引数の数や種類を変えたいと思った時にはどうすればよいか?

IDLの記述を変更し、当該オブジェクトのヘッダとソースの記述を変えればそれで良いようである。

**引数の種類 [#j6bb2b0d]
[out, retval]とすると、これがメソッドやプロパティの戻り値となる。これを引数リストのどこに持ってゆけばよいんだろう?

http://www.microsoft.com/japan/msdn/thisweek/combasics/combasics3.asp に、最後に記述している例があった。実際に最後でやってみたらうまくいった。

*スクリプティング [#te8c5cc1]
IDispatchを備えるオブジェクトはスクリプトから簡単に操作することができる。特に、Windows2000以降はWSH(Windows Scripting Host)が標準で備わっているため、特別な準備をしなくともVBScript、JScriptが使える。

VBScriptの利点:
-InputBox関数が標準で使え、パラメータのインタラクティブな入力が容易

JScriptの利点:
-文法がC++に近いので、経験がある者にとっては記述しやすい

*変数の型 [#r53bee5b]
BSTR、VARIANT、SAFEARRAYあたりが聞き慣れないがCOMによく登場する型

**SAFEARRAY [#ob5d64c3]
ATLにSAFEARRAYのラッパーは無い。MFCならCOleSafeArrayがある。