COMについて2010/08/15 09:07

雲は、最近、Windows Imaging Component にはまってます。何故かと言えば、画像ファイルを読み書きするライブラリにこれまで、GDI+を使ってきたのですが、GIF の書き出しがどうしてもうまくいかないことと、WPFと同じライブラリを使いたいということで、乗り換えを進めています。

いや、でも、WIC はCOMで出来ているので結構大変です。雲は、昔からプログラムを書いてはきましたが難しいことには近寄らないようにしていました。特に、MFCに代表されるWindowsのプログラミングからは距離を置いていたのが逆手に出てしまっています。

WIC を使おうと思って既に2年くらい経っていますが、何とか、使い方まではたどり着きました。いろいろと、Webで情報収集を済ませようと思っていましたが、結局、Inside COM を読む羽目になっています。

が、やはり、書籍はわかりやすい。確かに金額は高いのかもしれませんが、その分、時間を短縮出来ているように思います。

出版社の皆さん。高くても良いので、時間を短縮できるような良い書籍を出版してください。COMの本なんか、プレミアム付きになっていて泣きそうです(しかも古いし。。。)。

Web は便利ですが、決して、無料ではありません。最も大切な時間というリソースを無駄食いします。

ということで、COMを理解しようと頑張る雲でした。

COMを調べたメモ2010/08/16 09:07

Windows Imaging Component を調べているときに、PROPBAG2 なる構造体に遭遇しました。で、この中をみていると、VARIANTがあったので、さらに調べてみると、

VARIANT型を知ってみる

http://marupeke296.com/IKDADV_CPP_VARIANT.html

に出会いました。で、何故か、

SAFEARRAYを試してみる

http://marupeke296.com/IKDADV_CPP_SAFEARRAY.html

Dr.GUI と COM オートメーション、第 3 部:続 COM のすばらしきデータ型 http://msdn.microsoft.com/ja-jp/library/cc482694.aspx

を見ていると、SAFEARRAYでEXcelを操作する。というものを見つけました(←まさに、芋づる)。

範囲指定したCellのデータを取得

http://www.ujasiri.com/prglib/vc/excel/xls_getarray_exp.html

SAFEARRAYのMFCのラッパが(COleSafeArray)らしく、COleSafeArrayで検索するといろいろ出てきます。

メモリ管理クラス(HeapAllocなどをCOMでラップしたクラスあり)

http://msdn.microsoft.com/ja-jp/library/44yh1z4f.aspx

COM のエラーコード (HRESULT)

http://hyons.hp.infoseek.co.jp/ref/hresult.shtml

COM の使い方(MSDN)

http://msdn.microsoft.com/ja-jp/library/cc351700.aspx

VARIANT(何でも入れられる魔法の変数?)2010/08/16 17:17

COM で使われる構造体である、VARIANT を利用して Windows Imaging Component では画像の圧縮方法を指定します。ただ、VARIANT 自体は、WIC固有の構造体ではなく、COM で一般的に利用される構造体のようです。そこで、少し、VARIANT について調べたことを忘れないように書いておきます。

_variant_t を使用して、楽して安全にデータ変換

http://isobe.exblog.jp/2060639/

VARIANT型を知ってみる

http://marupeke296.com/IKDADV_CPP_VARIANT.html

Variant Manipulation Functions [Automation]

http://msdn.microsoft.com/en-us/library/ms221673.aspx

CComVariant クラス(VARIANTのスマートポインタ (ATL))

http://msdn.microsoft.com/en-us/library/bc1kbba1(VS.80).aspx

_variant_t を使用して、楽して安全にデータ変換(VARIANT型のスマートポインタ。ATLではなくこちらを採用)

http://isobe.exblog.jp/2060639/

_variant_t Class(MSDN)

http://msdn.microsoft.com/ja-jp/library/x295h94e(v=VS.80).aspx

_variant_t に入っている型の調べ方

http://hp.vector.co.jp/authors/VA014436/prg_memo/database/ms/009.html

SAFEARRAY(COMの配列)2010/08/16 18:05

_variant_tに配列を入れるときには、SAFEARRAYなるものを使うようです。なので、SAFEARRAYについても忘れないようにメモを残しておきます。

CComSafeArray クラス(SAFEARRAYのスマートポインタ ATL)

http://msdn.microsoft.com/ja-jp/library/3xzbsee8(v=VS.80).aspx

SAFEARRAYを試してみる

http://marupeke296.com/IKDADV_CPP_SAFEARRAY.html

_variant_tのchar, wchar への変換2010/08/16 19:33

_variant_t に文字列が含まれているときに、その文字列を取得する方法です。

wchar_t へ変換

_variant_t v( L"あいうえお" );
wchar_t str[20];
wcscpy_s( str, (_bstr_t)v );

char へ変換

_variant_t v( L"あいうえお" );
char str[20];
strcpy_s( str, (_bstr_t)v );

variant型のデータについてキャストするには?

http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200606/06060025.txt

さまざまな文字列型間で変換する

https://docs.microsoft.com/ja-jp/cpp/text/how-to-convert-between-various-string-types?view=msvc-170