64位Excel VBA调用C++ DLL加法函数返回0的问题求助
问题描述
使用64位Excel 2206(内部版本16.0.15330.20260)与Visual Studio Community 2022,在VBA中调用C++编写的DLL函数时,单参数平方函数可正常运行,但双参数加法函数在Excel中调用包装函数时始终返回0。
C++代码
源文件
#include "pch.h" #include "SquareLib.h" double WINAPI get_square(double* x) // 教程中的可用函数 { return *x * *x; } double WINAPI add_nums(double* x, double* y) // 自定义加法函数 { return *x + *y; }
头文件
#pragma once #ifdef SQUARELIB_EXPORTS #define SQUARELIB_API __declspec(dllexport) #else #define SQUARELIB_API __declspec(dllimport) #endif extern "C" SQUARELIB_API double get_square(double* x); extern "C" SQUARELIB_API double add_nums(double* x, double* y);
VBA代码
Declare PtrSafe Function get_square_cpp _ Lib "C:\Users\artil\source\repos\SquareLib\x64\Debug\SquareLib.dll" Alias "get_square" _ (ByRef my_var As Double) As Double Declare PtrSafe Function add_nums_cpp _ Lib "C:\Users\artil\source\repos\SquareLib\x64\Debug\SquareLib.dll" Alias "add_nums" _ (ByRef x As Double, ByRef y As Double) As Double Function get_square(x As Double) ' 平方包装函数 get_square = get_square_cpp(x) End Function Function add_num(x As Double, y As Double) ' 加法包装函数 add_nums = add_nums_cpp(x, y) End Function
问题排查与修复
核心错误:VBA包装函数赋值错误
加法包装函数add_num中,结果被错误赋值给未定义的add_nums,而非函数本身add_num。VBA中未显式为函数名赋值时,会默认返回0,这就是问题根源。修复后的包装函数代码:Function add_num(x As Double, y As Double) ' 加法包装函数 add_num = add_nums_cpp(x, y) End Function额外验证建议
- 确认DLL编译为x64版本,与Excel位数匹配(当前已满足)。
- 检查函数导出情况:在VS命令行中执行
dumpbin /exports SquareLib.dll,查看导出表确认add_nums是否正确导出。 - 参数传递验证:VBA中
ByRef对应C++的指针参数,当前Declare语句的参数传递方式是正确的,无需调整。
内容的提问来源于stack exchange,提问作者azncookiethief
相关产品推荐
相关产品推荐

