这个问题源于以下问题:
假设我有一个暴露给 vba 的 dllMyObj1
的 ATL/COM 类的实例,以及一个.TheClass
TheMethod
TheClass
在 VBA 中,我有一个函数
Public Function func(x as Variant) as Variant
'... something
MyObj1.TheMethod( x )
'... other things
End Function
这个函数在excel中使用,我将一个excel范围的单元格传递给它。在 VBA 中调试时,x 被视为 vba 类型“ Variant/Object/Range
”,并且具有Value2
vba 类型“”的“ Variant/Variant
”,并且如果范围是例如包含 expty 单元格的矩形并且在 excel 中加倍,Value2
则当展开时(仍在 watch in在 vba 中调试),它由“ ”或“ ”Variant
类型的 's组成。我想在下一步中用c++隔离这个“核心”“ ” 。Variant/Double
Variant/Empty
Value2
Variant
下一步,在 debug in c++ 的 ATLTheMethod
签名方法的入口处
STDMETHODIMP TheClass::TheMethod( VARIANT* var_in )
var_in
(收到后者x
)被视为vt
等于VT_DISPATCH
。这家伙肯定会携带(即使我不知道)后者已经携带的所有东西x
,但我想知道如何隔离它的“ Value2
”部分以捕捉它并使用它,因为只有Value2
部分我感兴趣。
让我说,我知道我可以在 vba 中执行此操作,而不是在 c++ 中执行此操作:
Public Function func(x as Variant) as Variant
'... something
MyObj1.TheMethod( x.Value2 )
'... other things
End Function
但我不想在 VBA 中使用这种东西。