タグ

2010年1月7日のブックマーク (2件)

  • 実装のための基礎知識

    AddRefとReleaseは1対1の関係で呼び出される必要がある。 なぜなら、COMでは、参照カウンタが0になった時点でメモリからインスタンスが消滅する。 そのため、参照カウンタが0にならない場合、いつまでもメモリ上にインスタンスが存在することになる。 ただし、VC++のスマートポインタなどでは、自動的に、AddRef,Releaseの呼びだしが行われるため、スマートポインタを利用している場合は、気にする必要がない。 CoCreateInstance コンポーネントのインスタンスを生成するためのAPI。 クラスファクトリ ほかのCOMコンポーネントの新スタンスを作成するためのコンポーネント。 IDispatchインターフェイス オートメーションの基礎になるインターフェイス。 このインターフェイスを利用すると、コンポーネントの持つ機能(状態や動作)を実行時に知ることが可能。

    tasanobu
    tasanobu 2010/01/07
    SafeArrayGetLBound [COM][variant]
  • C++でVARIANT型は、どんな定義になっているのですか?VBでのコーディングはDimlsAsVariantls - C++で... - Yahoo!知恵袋

    C++ではVARIANTという構造体と共用体が入り乱れてネストした形になっています。 大きくわけると,どんな型の値が収められているかを示すvtメンバと,実際の値が納められている部分になります。 実際にはCOleVariant(MFC)やATL::CComVariant(ATL)そして_variant_tと言ったラッパークラスがあるので扱いはそんなに苦ではありません。 そしてOLEで配列はSAFEARRAY構造体を使います。 これもCOleSafeArray(MFC)やATL::CComSafeArray(ATL)などのラッパーが存在します。 さて問題のコードはどうなるかというとATLを使えばこうなります。 ATL::CComSafeArray<VARIANT> sa(2); //2は要素数 sa[0] = 1; sa[1] = 5; ATL::CComVariant ls(sa); Arr

    C++でVARIANT型は、どんな定義になっているのですか?VBでのコーディングはDimlsAsVariantls - C++で... - Yahoo!知恵袋