Excel链接C+时出错+;:&引用;公式中使用的值的数据类型错误; 我写了一个简单的C++程序< /p>

Excel链接C+时出错+;:&引用;公式中使用的值的数据类型错误; 我写了一个简单的C++程序< /p>,c++,excel,dll,x86-64,32bit-64bit,C++,Excel,Dll,X86 64,32bit 64bit,Source.cpp: double __stdcall square(double& x) { return x*x; } Define.def: LIBRARY "square" EXPORTS square 然后在my.xlsm文件模块中,添加了模块1导入: 声明PtrSafe函数平方_ Lib“C:\Users\user\Documents\AthosCode\Marek Kolman Square\Square\Debug\Square.dll”_ (ByRef

Source.cpp:

double __stdcall square(double& x)
{
    return x*x;
}
Define.def:

LIBRARY "square" 
EXPORTS
square
然后在my.xlsm文件模块中,添加了模块1导入:

声明PtrSafe函数平方_
Lib“C:\Users\user\Documents\AthosCode\Marek Kolman Square\Square\Debug\Square.dll”_
(ByRef x为双精度)为双精度
在活页1中,将
10
放在A1中,将
=正方形(A1)
放在B1中

错误为:“公式中使用的值的数据类型错误”

有什么问题,我该如何解决

我的环境是

  • Windows 7 64位
  • Visual Studio 2016社区(因此它是32位的)
  • Excel 2016 64位

回复注释时,如果我将passing by reference更改为passing by value,则错误是相同的

我将Source.cpp更改为

double __stdcall square(double x)
{
    return x*x;
}
并将模块1更改为

声明PtrSafe函数平方_
Lib“C:\Users\user\Documents\AthosCode\Marek Kolman Square\Square\Debug\Square.dll”_
(ByVal x为双精度)为双精度

同样的错误。

由于架构上的差异,不可能做到这一点,反之亦然

可以这样做,但除非您有没有64位版本的旧式DLL,否则您应该编译为64位项目。因此,您需要一个64位DLL


由于架构上的差异,不可能做到这一点,反之亦然

可以这样做,但除非您有没有64位版本的旧式DLL,否则您应该编译为64位项目。因此,您需要一个64位DLL


为什么通过引用传递?传递值应该足够。@宋元耀同样的错误。请查看更新后的帖子。您是否将A1单元格格式设置为双精度?也许excel会把它解释成一个字符串。重要的是,如果您的dll是在32位或64位模式下编译的,而不是在VS模式下编译的version@Ari0nhh不,这不是问题所在。如果把“10.5”放在A1中,把“=A1*A1”放在B1中,它就工作了。为什么要通过引用传递?传递值应该足够。@宋元耀同样的错误。请查看更新后的帖子。您是否将A1单元格格式设置为双精度?也许excel会把它解释成一个字符串。重要的是,如果您的dll是在32位或64位模式下编译的,而不是在VS模式下编译的version@Ari0nhh不,这不是问题所在。如果将“10.5”放在A1中,将“=A1*A1”放在B1中,则其工作正常。