- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在之前的一个question 的回答中找到了一种无需注册即可调用在 (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 声明如下:
It is important not to add any data members or virtual functions to this class. The design of xlw relies on the fact that class XlfOper has the same size as LPXLOPER/LPXLOPER12, this assumption allows values of those types received from Excel to be interpreted by the library as instances of XlfOper.
最佳答案
经过一些研究,我找到了它:Passing User-Defined Types
MSDN 写道: 许多 DLL 函数要求您使用预定义格式传入数据结构。当从 VBA 调用 DLL 函数时,您将传递一个您根据函数的要求定义的用户定义类型。
因此,您需要定义 XlfOper 数据结构;)
关于c++ - 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19540594/
我在之前的一个question 的回答中找到了一种无需注册即可调用在 (C++) xll 中定义的函数的方法。我之前使用的是 XLW 提供的注册基础结构,我使用 XlfOper 类型在 VBA 和 x
我是一名优秀的程序员,十分优秀!