你好,我正在尝试创建一个简单的C++ dll来在Excel中使用。在excel中使用C++ dll时没有考虑到的参数
这里是我做过什么:
.cpp文件:
double _stdcall Test(double z)
{
return z+2.0;
}
DEF文件:
LIBRARY
EXPORTS
Test
在Visual Studio: 项目属性>配置属性>命令>“ Path/EXCEL.EXE“
配置管理器>平台> x64
在VBA:
Declare PtrSafe Function Test Lib _
"Path\MyDLL" (ByVal z As Double) As Double
但是,当我打电话测试(2)在Excel中,它返回2,而不是4看起来说法被视为0送花儿给人(其实如果我产值在调用该函数时在一个文件中,它是2.122e-314)。
任何输入将不胜感激。
感谢
编辑1: 如果我改变参数和返回值INT与VBA龙,测试(2)返回3
任何人有一个想法,为什么参数为1诠释?
一切都适合我。您是否记得将模块定义文件设置为您的.def文件?这是什么'项目属性>配置属性>命令>“路径/ EXCEL.EXE”'。我没有这样的选择。 – ly000
如果我不这样做,我得到以下错误: “路径/ MyDLL.dll”不是有效的Win32应用程序。 事情是,def文件可能工作正常,因为函数被调用,只是没有考虑Excel参数 –
您的C++编译器不知道该函数正在导出。所以它期望参数传递的方式不同,浮点是通过SSE指令完成的,参数通过XMM0寄存器传递。然而,Excel假定参数应该以传统方式通过FPU寄存器ST0。把'__declspec(dllexport)'放在函数前面来解决这个问题。 –