0

私は、Windows のみの C++ コードで使用する必要がある COM オブジェクトを持っている状況にあります。COM オブジェクトには、バイト配列を渡すための引数として SAFEARRAY を受け入れる関数があります。SAFEARRAY API ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms221145(v=vs.85).aspx ) を見た後、それは私が望んでいたものではなく、オブジェクト指向ラッパーを見つける必要があります。オープンソースのものを探してみましたが、見つかりませんでした。私は、Microsoft が SAFEARRAY をカプセル化しているように見える 2 つのオブジェクトを作成したことを発見しました。CComSafeArray はまさに私が必要としているもののように見えます.COleSafeArray は便利かもしれませんが、レガシー互換性のためだけに存在する可能性があります.

COleSafeArray は歴史的な互換性のためだけのものですか、それとも欠けているものがありますか?

CComSafeArray の代わりに COleSafeArray を使用する必要があるのはいつですか?

検討する価値のあるオープンソースの実装はありますか?

それぞれの長所と短所は何ですか?

4

1 に答える 1

1

違いはクラス名から明らかです。

MFCCOleSafeArrayは OLE オートメーションをサポートするように設計されており、実際には OLEVARIANT構造体 (を含むことができますSAFEARRAY) のラッパーです。通常、配列要素はVARIANTタイプであるため、適切なタイプを手動で選択して抽出する必要があります。

ATLは汎用 COMCComSafeArrayをサポートするように設計されており、実際には構造体のラッパーです。配列要素型でパラメータ化されたテンプレート クラスです。SAFEARRAYSAFEARRAY

一般に、 を使用する必要がCComSafeArrayあります。通常の配列/ベクトルとほぼ同じ方法で要素にアクセスする方が簡単で簡単です。

COleSafeArrayVARIANTたとえば、MS Office の自動化、Visual Basic コンポーネントの使用など、パラメーターを集中的に使用する OLE オートメーション インターフェイスを使用する場合は、この方法が望ましい場合CComSafeArrayがありVARIANTます。

于 2012-11-08T21:59:28.747 に答える