我在上一个问题的答案中发现了一种无需注册即可调用 (C++) xll 中定义的函数的方法。我之前使用的是 XLW 提供的注册基础结构,我使用 XlfOper 类型在 VBA 和 xll 之间传递参数。
c++ 函数是这样的:
extern "C" {
LPXLOPER EXCEL_EXPORT a_function(XlfOper arg1, XlfOper arg2);
}
按照我之前的解决方案的答案,我直接声明了函数,如下所示:
Declare Function an_exported_function Lib "MyDrive:\MyPath\myxll.xll"_
Alias "a_function" (arg1 As Object, arg2 As Object) as Object
通过附加到 excel 进程,我可以看到正在调用该函数,但我在参数中收到垃圾或空数据。我想,这是因为我没有告诉 VBA 如何转换为正确的数据类型。
如何正确调用 XlfOper 参数?我认为调用 LPXLOPER 应该可以完成这项工作,因为 xlw 声明如下:
重要的是不要向此类添加任何数据成员或虚函数。xlw 的设计依赖于 XlfOper 类具有与 LPXLOPER/LPXLOPER12 相同的大小这一事实,该假设允许从 Excel 接收的那些类型的值被库解释为 XlfOper 的实例。