通过传递句柄减速器将 C++ 包装为 C#

c++ wrapping to c# by passing handle decelrator

本文关键字:C++ 包装 减速器 句柄      更新时间:2023-10-16

我在 c++ 中有一个这样的函数,里面还有另一个函数,如下所示:

Doom(int n, const array<double> ^x, int incx, int k, double r){
     pin_ptr<double> xptr = &(x[0]);
     fdoom(n, xptr, incx, &k, &r, &fail);
}

现在,当我从 C# 调用此函数时:

int k = 0;
double r = 0.0;
CPPCode.Doom(n, x, incx,  k, r);

在这里,我的值 k 和 r 应该更改为 1 和 -2,但这不会发生。所以我必须使用引用才能发生这种情况但我对如何将 CLR 引用用于单个值感到完全困惑。

请注意,函数 fdoom 在其类中是这样定义的:

void    fdoom (Integer n, const double x[], Integer incx,
        Integer *k, double *r, NagError *fail) 

在托管C++中,如果要通过引用从 C# 调用它,则应使用 %。那是你的函数看起来像这样:

Doom(int n, const array<double> ^x, int incx, int %k, double r){
     pin_ptr<double> xptr = &(x[0]);
     pin_ptr<int> kptr = &k;
     fdoom(n, xptr, incx, kptr, &r, &fail);
}

在 C# 函数中,您应该使用 ref 关键字通过引用来调用它。那是:

CPPCode.Doom(n, x, incx, ref k, r);