我正在尝试在类型库中定义一个函数,它接受可变数量的参数,并且可以使用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访问的本机代码中创建函数?
答案 0 :(得分:1)
我在这里找到答案: http://computer-programming-forum.com/71-visual-basic-vb/a064ce72acaeb9d8.htm
显然,IDL中的Key参数应该是:
[in] SAFEARRAY(VARIANT)* Key,
C ++函数的参数类型应为
SAFEARRAY** Key