64位环境下C++ DLL作为Excel函数运行异常求助
64位环境下C++ DLL导出函数供Excel VBA调用时参数传递异常
大家好,这是我的首次发帖。我最近一直在尝试跟着各类教程把C++ DLL编译成Excel可调用的函数,但折腾了好久都没成功,实在没办法了来求助大家。
我的环境配置:
- Windows 10 64位系统
- Visual Studio Community 2017
- Excel 2016 64位版本
我已经完成的操作步骤:
- 通过VS的「Windows Desktop Wizard」新建了一个空的DLL项目
- 项目的「Source Files」文件夹下只有两个文件:
- funct.cpp:
double __stdcall squareFxn(double x) { return x * x; } - defFile.def:
LIBRARY "square" EXPORTS squareFxn
- funct.cpp:
- 项目属性配置:
- 在配置管理器中将平台设置为x64
- 在链接器/输入/模块定义文件中添加了
defFile.def
- 编译完成后,我在Excel的VBA编辑器里写了函数声明:
Declare PtrSafe Function squareFxn Lib "C:\MyPath\square.dll" (ByVal x As Double) As Double
遇到的问题:
- 当我在VS中调试,然后在Excel单元格输入
=squareFxn(5)时,VS里显示参数x是一个极小值(6.234E-310),函数最终返回0,完全不符合预期 - 我尝试改成引用传递:把C++函数改成
double __stdcall squareFxn(double &x),同时VBA声明里改成ByRef x As Double,结果直接出现读访问错误 - 我已经试过以管理员身份运行Excel,但问题还是没解决
请问有人知道问题出在哪吗?恳请各位大佬提供帮助!
内容的提问来源于stack exchange,提问作者Mark L.
相关产品推荐
相关产品推荐

