我写了一个简单的C ++程序
Source.cpp:
double __stdcall square(double& x)
{
return x*x;
}
Define.def:
LIBRARY "square"
EXPORTS
square
然后在我的.xlsm文件模块中,添加了module1 imporing:
Declare PtrSafe Function square _
Lib "C:\Users\user\Documents\AthosCode\Marek Kolman Square\Square\Debug\square.dll" _
(ByRef x As Double) As Double
并在Sheet1中,将10
放在A1中,将=square(A1)
放在B1中。
错误说:"公式中使用的值是错误的数据类型"。
问题是什么,我该如何解决?
我的环境是 - Windows 7 64位 - Visual Studio 2016社区(所以它是32位) - Excel 2016 64位
回复评论,如果我通过引用传递值来改变传递,则错误是相同的。
我将Source.cpp更改为
double __stdcall square(double x)
{
return x*x;
}
并将module1更改为
Declare PtrSafe Function square _
Lib "C:\Users\user\Documents\AthosCode\Marek Kolman Square\Square\Debug\square.dll" _
(ByVal x As Double) As Double
同样的错误。
答案 0 :(得分:1)
由于架构不同,load a 32-bit DLL in a 64-bit process不可能,反之亦然
可能access 32-bit DLLs from 64-bit code但除非您有没有64位版本的旧DLL,否则应该编译为64位项目。并64-bit Office doesn't support 32-bit plugin at all所以你需要一个64位的DLL。