从Excel VBA / Python

时间:2016-08-13 17:37:02

标签: c++ python-2.7 excel-vba vba excel

假设我的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
};

myproject.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

mywb.xlsm(VBA)

Declare Function xl_fun Lib "myproject.dll" Alias "xfun" _
    (ByRef x As Double, ByVal n As Integer, ...) As Double
然后从Excel调用

xl_fun(),之后从Python 2.7调用fun()

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

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

没有详细说明,此更新和返回的数字更好

所有异常都由f.bar()返回的时间来处理。

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

Excel为扩展精度(80位)设置FPU标志,而大多数其他运行时环境不允许。这可能会在您观察到的差异中发挥作用。