簡體   English   中英

從Excel VBA / Python調用時C ++ dll返回不同的結果

[英]C++ dll returns different results when called from Excel VBA/Python

假設我的VC100 Dll項目具有以下內容:

oo

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一樣。

但是,從Python 2.7調用fun()時,第一個參數更新,並且返回值不同。

無需贅述,此更新和返回的數字比Excel的數字更好

f.bar()返回時將處理所有異常。

我已逐步完成並確認傳遞給Foo的構造函數的輸入在兩種情況下都是相同的。 我還確認了Foo.v的初始狀態在兩種情況下都是相同的。 給定相同的輸入,相同的DLL如何產生不同的結果?

任何幫助深表感謝。

Excel設置FPU標志以提高精度(80位),而其他大多數運行時環境則沒有。 這可能在您觀察到的差異中起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM