我有一个COM对象,我正在尝试使用C ++(而不是.NET),所有示例程序和手册都是在假设使用C#.NET或VB.NET的情况下编写的。 COM对我来说是新的,所以我有点不知所措。我在TLB上使用#import,但我正在努力处理用作参数的变体。我有一个特殊的方法,根据文档和C#.NET中的示例程序,应该返回一个对象[]。然后我应该将此数组中的第一个条目转换为ControlEvent,然后告诉我如何处理数组中的其余对象。 C#.NET示例如下所示:
object [] objEvent = (object []) Ctl.GetEvent();
ControlEvent ev = (ControlEvent) objEvent[0];
在我的情况下,GetEvent返回给我一个_variant_t,我需要知道如何将它转换为一个对象[],以便我可以进一步处理。我甚至不清楚如何用C ++表达'对象'。我看到_variant_t文档向我展示了我可以将变体转换为一百万件的东西,但它们似乎都没有转换为我可以使用的任何东西。我希望能帮助将上述C#.NET代码转换为Visual C ++
感谢。
答案 0 :(得分:1)
通常,您会查看变体的vt
成员,看看它实际上是什么类型的东西。在这种情况下,我希望它是一个数组,所以你会期望vartype会在VT_ARRAY上有一些变化(通常它与成员的类型按位OR运算)。然后,你得到parray
成员,其中包含实际拥有数组的SAFEARRAY
实例,并使用普通的安全数组函数从数组中获取数据。
答案 1 :(得分:1)
我没有这样做,但是通过阅读_variant_t
课程的文档(以及下面的评论更正了我原来的帖子),我认为您应该阅读vt
字段{ {1}}实例(实际上_variant_t
实例的VARTYPE vt
字段:VARIANT
实例直接派生自_variant_t
)以查看它包含的内容类型,如上所述在VARIANT
结构的参考文档中。你知道变体中包含什么类型的东西,使用相应的特定于类型的运算符来读取它。
如果你试图在没有理解的情况下使用COM,你会受到一些伤害(你可能想要一本描述它的书);例如,您可能需要了解VARIANT
界面和IUnknown
方法。