我在之前的回答里发现了问题 https://stackoverflow.com/q/19325258/159684一种无需注册即可调用 (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 的实例。
经过一番研究后我发现:传递用户定义类型 http://msdn.microsoft.com/en-us/library/office/aa141260%28v=office.10%29.aspx
MSDN 写道: 许多 DLL 函数要求您使用预定义格式传入数据结构。从 VBA 调用 DLL 函数时,您可以传递根据函数要求定义的用户定义类型。
因此,您需要定义 XlfOper 数据结构;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)