具有SAFEARRAY(VARIANT)参数的vararg函数不能从VBA调用

时间:2013-09-08 14:01:35

标签: vba com

我正在尝试在类型库中定义一个函数,它接受可变数量的参数,并且可以使用ParamArray从VBA调用。 类型库中的条目如下所示。

    [
    helpstring("Get value from a Lookup table by an exact key."),
    entry("UtilDll_LookupExact"),
    vararg
    ]
    HRESULT __stdcall LookupExact(
        [out] LPVARIANT Result, 
        [in] LPVARIANTARG Table, 
        [in] LONG VarIndex, 
        [in] SAFEARRAY(VARIANT) Key,
        [out, retval] VARIANT_BOOL *Found
        );

我可以将此VBA的对象浏览器视为:

函数LookupExact(Result,Table,VarIndex As Long,ParamArray Key()As Variant)As Boolean

所以,至少对象浏览器似乎将Key理解为ParmArray()Variant。 但是当我调用这个函数时,我得到一个编译错误,说“编译错误:标记为受限制的函数或接口,或者函数使用Visual Basic中不支持的自动化类型”

我发现的最接近的问题是下面的问题,但是当我处理本机代码时,这种情况似乎特定于托管代码。 ParamArray Not Working With COM

如何在具有ParamArray参数且可以通过VBA访问的本机代码中创建函数?

1 个答案:

答案 0 :(得分:1)

我在这里找到答案: http://computer-programming-forum.com/71-visual-basic-vb/a064ce72acaeb9d8.htm

显然,IDL中的Key参数应该是:

[in] SAFEARRAY(VARIANT)* Key,

C ++函数的参数类型应为

SAFEARRAY** Key