c++ 通过传递句柄减速器包装到 c#
c++ wrapping to c# by passing handle decelrator
我在 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 在 class:
中是这样定义的
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);
我在 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 在 class:
中是这样定义的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);