0

我正在尝试在类型库中定义一个函数,该函数采用可变数量的参数,并且可以使用 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 不适用于 COM

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

4

1 回答 1

1

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

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

[in] SAFEARRAY(VARIANT)* Key,

C++ 函数的参数类型应该是

SAFEARRAY** Key
于 2013-09-08T15:06:21.797 回答