【发布时间】:2017-02-05 08:07:54
【问题描述】:
我正在编写一个 COM 客户端。我的 COM 服务器中的一个函数将枚举作为参数并返回一个数字(长) 看起来像这样:
函数 GetFlowsheetStatus(iQueryFlags As FlowSheetObjStatusFlag_enum) 只要 我同时使用早期和后期绑定(IDispatch 和直接接口)所以我写了类似的东西:FlowSheetObjStatusFlag_enum flag;_variant_t p = _variant_t(flag);
所以我需要将枚举“FlowSheetObjStatusFlag_enum”转换为 _variant_t 才能通过它。我该怎么做?
【问题讨论】:
-
是什么让您认为必须将其转换为变体?加上“看起来像这样”的例子看起来像 VBA 或 VB6,而不是 C++,但你要求 C++;你能澄清一下吗?
-
感谢您的评论。我试图传递除变体以外的任何东西,HRESULT 返回错误。该示例来自用 VBA 编写的 COM 服务器文档。
-
使用 VBA 签名,使用 Variant 是错误的。除非您通过自动化(调用 IDispatch 方法)使用该库,否则您没有提到并且是困难的方法;或者如果这个例子是在撒谎(总是可能的)。假设这个例子没有说谎,而且这是 C++,你只能传递正确的数据类型,否则它甚至不会编译,所以我对“返回错误”感到困惑。要传递的正确“枚举”定义取决于您如何将类型库合并到 C++ 代码中。例如,如果您使用了#import,请检查生成的 C++ 文件以确定枚举类型的名称。
-
谢谢。我的错误是我创建了自己的枚举类型并想通过自动化传递它。我使用 IDispatch 方法。我通过找到服务器公开的枚举解决了这个问题。我的错误是为此编写了一个相同的枚举。
-
我同时使用早期和后期绑定(IDispatch 和直接接口)所以我写了类似的东西:FlowSheetObjStatusFlag_enum flag;_variant_t p = _variant_t(flag);我仍然有错误,但我认为它们的起源在其他地方(希望如此)
标签: c++ enums com typeconverter