gpt4 book ai didi

c++ - 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:25:47 24 4
gpt4 key购买 nike

我在之前的一个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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com