我有一个COM对象,我试图从C++(不是.NET)使用,并且所有的示例程序和手册都是假定使用的C#.NET或VB.NET。 COM对我来说是新的,所以我有点不知所措。我在TLB上使用#import,但我正在努力处理用作参数的变体。我有一个特定的方法,根据文档和C#.NET中的示例程序,应该返回一个对象[]。然后,我应该将这个数组中的第一个条目转换为ControlEvent,然后告诉我如何处理数组中的其余对象。在C#.NET示例如下:在C#.NET中使用C++中的COM对象返回对象[]
object [] objEvent = (object []) Ctl.GetEvent();
ControlEvent ev = (ControlEvent) objEvent[0];
在我的情况,GetEvent将返回我一个_variant_t,我需要知道如何将其转换为一个Object [],这样我可以进一步处理。它对我来说并不清楚,即使我用C++表达'对象'。我看到_variant_t文档向我展示了我可以将变体转换为的一百万个事物,但是他们中没有一个似乎转换为我可以使用的任何东西。我希望有一些帮助将上面的C#.NET代码转换为Visual C++
谢谢。
谢谢,我想你已经让我走上正轨。 VT是VT_ARRAY || VT_VARIANT,我从API调用中返回一个带有两个元素的SafeArray,每个元素都是一个VT_I4。然而,两者的lVal都为零,所以我仍然坚持我应该如何将这些VT_I4变成指向对象的指针 – bdk 2009-08-30 03:38:22
你可以显示你用来检索'SAFEARRAY'元素并获得'VT_I4'的代码吗? – 2009-08-30 03:56:18
_variant_t v = m_pCtl-> getNextEvent() printf(“Variant Type is%x \ n”,v.vt); [打印0x200c]] _variant_t项 LONG IDX = 0 HRESULT HR = SafeArrayGetElement(v.parray,&IDX,和项目) 如果(小时== S_OK) 的printf( “元素类型是:%d \ n” 个, item.vt); [[打印3]] – bdk 2009-08-30 04:12:20