0

我有一个我试图从 C++(不是 .NET)使用的 COM 对象,并且所有示例程序和手册都是假设使用 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,我需要知道如何将其转换为 object[] 以便我可以进一步处理。我什至不清楚我如何在 C++ 中表达“对象”。我看到 _variant_t 文档向我展示了一百万个我可以将变体转换为的东西,但它们似乎都没有转换为我可以使用的任何东西。我希望在将上述 C#.NET 代码转换为 Visual C++ 时得到一些帮助

谢谢。

4

2 回答 2

1

通常,您查看vt变体的成员以了解它实际上是什么类型的东西。在这种情况下,我希望它是一个数组,因此您会认为 vartype 会是 VT_ARRAY 的一些变化(通常它与成员的类型按位或运算)。然后,您获取parray包含SAFEARRAY实际保存数组的实例的成员,并使用正常的安全数组函数从数组中获取数据。

于 2009-08-30T02:58:36.490 回答
1

我没有这样做,但是通过阅读_variant_t该类的文档(以及下面纠正我原来帖子的评论),我认为您应该阅读实例的vt字段 _variant_t(实际上是实例的VARTYPE vt字段VARIANT_variant_t实例直接派生自VARIANT) 查看它包含什么类型的东西,如结构的参考文档中所述VARIANT。如果您知道变体中包含什么类型的东西,请使用相应的特定于类型的运算符来读取它。

如果您在不理解 COM 的情况下尝试使用它,您将会受到一些伤害(并且您可能想要一本书来描述它);例如,您可能需要了解IUnknown接口和AddRef方法。

于 2009-08-30T03:00:39.903 回答