2017-07-25 10 views
1

Windows API用のCOMラッパーを開発しています。ネイティブWindows APIサポートを持たないスクリプト言語から使用できます。だから、私はCOM ATLプロジェクトで何を使うべきか考えています。 SAFEARRAYまたはCComSafeArrayVARIANTまたはCComVariant?または他の構造体または適切なラッパー?COMオートメーション構造体とそれらのラッパー

両方のタイプを使用してテストしましたが、パフォーマンスの違い、使用上の問題、またはそれらの間の追加の実装は見つかりませんでした。

COM ATLプロジェクトで使用するのに最適なのはどれですか?たとえば、SAFEARRAYまたはCComSafeArray

+3

1999年に逆戻りしてしまいました。思い出して欲しいです! –

+1

ラッパーは実際には同じであるが、より少ない労力とより高い精度で達成するのを手助けするので、明らかにATLコードでそれらを使用する必要があります。 –

答えて

3

インターフェイスとコーカサスは、SAFEARRAYVARIANTを使用する必要があります。 COMインターフェイスまたはオブジェクトは、COMパブリックメソッドのシグネチャまたはプロパティのいずれかにCComSafeArrayまたはCComVariantを使用することはできません。しかし、ですが、コクラスの実装ではCComSafeArrayまたはCComVariantを使用してください。

+2

FWIW:私は 'variant_t'([_variant_t'](https://msdn.microsoft.com/en-us/library/x295h94e.aspx)のエイリアス)を' CComVariant'に優先しますが、それはATLが嫌いです。 :) –

+0

C++でATLプロジェクトを使用する上で不都合はありませんか? – GTAVLover

+1

@GTAVLover:ATLを使用することの短所、または 'CComVariant'ではなく' variant_t'の短所ですか? ATLの答え:私はCOMをC++(および他のすべての言語)で約20年間行ってきたので、自分のプロジェクトでATLよりも簡単な独自の実装を100%快適に使いこなしています。 'variant_t'答え:ATLが 'CComVariant'を期待するケースがあるかもしれないので、少しの翻訳コードが必要かもしれません。しかし、 'variant_t'にはいくつかの利点があります。非常に軽く、完全にインライン化されており、コードは読みやすく理解しやすいです。 –

関連する問題