私はC++(.NETではなく)から使用しようとしているCOMオブジェクトを持っており、すべてのサンプルプログラムとマニュアルは、 C#.NETまたはVB.NETのCOMは私には新しく、私は少し圧倒される。私はTLB上で#importを使用していますが、パラメータとして使用されているバリアントに対処するのに苦労しています。私は特定の方法を持っています。ドキュメントやC#.NETのサンプルプログラムでは、オブジェクト[]を返すことになっています。次に、この配列の最初の項目をControlEventにキャストして、配列内の残りのオブジェクトをどのように処理するかを教えています。 C#.NETの例は、次のようになります。私の場合はC#.NETでCOMオブジェクトを使用するとC#.NETでオブジェクトが返される
object [] objEvent = (object []) Ctl.GetEvent();
ControlEvent ev = (ControlEvent) objEvent[0];
、のGetEventは私に_variant_tを返していると私は[]ので、私はさらに処理することができ、そのオブジェクトにこれを変換する方法を知っておく必要があります。 C++で 'オブジェクト'をどのように表現しているかについても私には分かりません。私はバリアントを変換することができる万のものを私に示す_variant_tのドキュメントを見ていますが、それらのどれも私が使用できるものに変換していないようです。私は上記のC#.NETコードをVisual C++に変換する助けを願っています
ありがとうございました。
ありがとうございます、私は正しい軌道に乗ったと思います。 vtはVT_ARRAYです。 VT_VARIANT、API呼び出しから戻ってきます。SafeArrayには2つの要素があり、それぞれがVT_I4です。しかし、両方のlValは0なので、私はまだこれらのVT_I4をオブジェクトへのポインタに変換するはずです。 – bdk
'SAFEARRAY'要素を取得するために使用したコードを表示して、' VT_I4'を取得できますか? –
_variant_t v = m_pCtl-> getNextEvent() printf( "バリアント型は%x \ n"、v.vt)です。 [プリント0x200c] _variant_t項目 LONG IDX = 0 HRESULTのHR = SafeArrayGetElement(v.parray、&IDX、&アイテム) 場合(時間== S_OK) のprintf( "要素タイプがある:%Dを\ n"、 item.vt); [[prints 3]] – bdk