gpt4 book ai didi

从 Excel VBA/Python 调用时,C++ dll 返回不同的结果

转载 作者:行者123 更新时间:2023-11-28 02:02:22 25 4
gpt4 key购买 nike

假设我的 VC100 Dll 项目有以下内容:

Foo.h

struct Foo {
std::vector v;
...

Foo(const double* x, const long& n, ...)
: v(x, x + n),
... {; }

double bar() {...} // Does something to this->v, returns a double
};

我的项目.cpp

#include "Foo.h"    

double fun(double* x, long n, ...) {

Foo f(x, n, ...);

const double r(f.bar());

std::memcpy(x, f.v.data(), n * sizeof(double));

return r;
}

inline double __stdcall xfun(double* x, long n, ...) {
return fun(x, n, ...);
}

def.def

library "myproject"
EXPORTS
fun
xfun

我的wb.xlsm (VBA)

Declare Function xl_fun Lib "myproject.dll" Alias "xfun" _
(ByRef x As Double, ByVal n As Integer, ...) As Double

xl_fun() 然后从 Excel 调用,fun() 之后从 Python 2.7` 调用。

我的问题是,xl_fun() 将返回并将其第一个参数更新为 Foo.v 的内容,就像 Python 一样。

但是,当从 Python 2.7 调用 fun() 时,第一个参数更新,返回值不同。

无需赘述太多细节,此更新和返回的数据比 Excel 的更好

所有异常都在 f.bar() 返回时处理。

我已经逐步检查并确认传递给 Foo 的构造函数的输入在这两种情况下都是相同的。我还确认 Foo.v 的初始状态在这两种情况下是相同的。相同的 DLL 如何在给定相同输入的情况下产生不同的结果?

非常感谢任何帮助。

最佳答案

Excel 会为扩展精度(80 位)设置 FPU 标志,而大多数其他运行时环境则不会。这可能会影响您观察到的差异。

关于从 Excel VBA/Python 调用时,C++ dll 返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38935348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com