【问题标题】:ActiveX method with variable parameter list?带有可变参数列表的 ActiveX 方法?
【发布时间】:2013-04-07 15:16:33
【问题描述】:

我有一个 DLL,它为函数提供了一个可变参数列表,其定义如下

my_func(int var,...)

根据 my_func() 的调用方式,它需要或多或少的附加参数。

现在这个 DLL 必须由基于 MFC 的 ActiveX 控件包装。对于方法定义,我可以找到许多 VT_ 和 VTS_ 定义包装到特定的预定义类型。但是是否也可以有一个带有这种可变参数列表的 ActiveX 方法?

如果是:如何实施?

【问题讨论】:

  • 您可以考虑一个具有所有相关值的(固定大小)结构/记录,然后只提供一个指针。然后就值/标志达成一致以指示空字段。或者,两个变量,其中一个是指向结构的指针(带有适用于特定场景的数据),另一个是该类型结构的标识符。在 Windows API 中,结构体大小通常用作(版本)标识符。

标签: windows mfc activex ocx


【解决方案1】:

虽然技术上可行,但通过在 IDL 中使用 vararg 关键字与指定为 SAFEARRAY(VARIANT) 的参数组合,不支持在 MFC ActiveX 项目中指定此类方法。您可以使用 ATL 来代替,但我认为这将是一个巨大的不便,只是为了获得您描述的功能。

一些更好的选择(在我看来)是:

  1. 为包装函数的每个用例提供特定方法。
  2. 提供一个公开所有参数的单一方法,并添加一个 UINT 以根据应使用的参数设置标志。

我的选择是 1。

【讨论】:

  • 嗯,在这种情况下,这两种解决方案都是不可能的。可变参数列表原本是一个列表,由一个标签(char-array)和一个值(取决于标签,可以是char-array、int或pointer)组成。由此产生的可能组合和变体非常巨大。所以我担心我必须提供为每次调用设置一个标签/值对的函数和一个完成列表的其他函数,以便它可以在内部使用。不是很优雅...
  • 我明白了 - 我猜你需要某种类型的外观模式,在 DLL 中这样做是否更容易使 ActiveX 更简单?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
  • 2016-07-18
  • 2017-11-04
  • 2018-04-29
相关资源
最近更新 更多