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

时间:2013-10-23 11:38:32

标签: c++ visual-studio vba excel-vba xlw

我在前一个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声明了以下内容:

  

重要的是不要添加任何数据成员或虚拟成员       这个类的功能。 xlw的设计依赖于类的事实       XlfOper与LPXLOPER / LPXLOPER12具有相同的大小,这个假设允许       从Excel接收的那些类型的值将由库解释       作为XlfOper的实例。

1 个答案:

答案 0 :(得分:1)

经过一些研究后我发现了它:Passing User-Defined Types

MSDN写道: 许多DLL函数都要求您使用预定义的格式传入数据结构。从VBA调用DLL函数时,您将根据函数的要求传递已定义的用户定义类型。

因此,您需要定义XlfOper数据结构;)