从c#中的c++函数返回数组和结构

本文关键字:数组 结构 返回 函数 中的 c++ | 更新日期: 2023-09-27 18:00:03

我有一个用c++编写的函数,我把它放在dll中,并使用DllImport在c#中使用。一切正常;我能够从c++中获得返回值,并将其显示在我的c#GUI中。现在我想添加到该函数中,并让它返回多个值(到目前为止为3)。我已经尝试了将C++数组返回到C#和如何在C++中返回两个不同的变量中给出的方法?但两者都不起作用。第一篇文章中的代码给了我一个访问冲突错误,而第二篇文章的代码则给了我该结构的所有0值。对于第一个,我甚至准确地复制了给定的代码,并试图运行它,但没有成功。是什么原因导致了这些方法给出的错误和错误值?我怎样才能让他们上班?

为了以防万一,下面是我自己的代码和第二篇文章的实现。

平分.h

 struct Result
{
    double root;
    double relError;
    double absError;
}result;
extern "C" {__declspec(dllexport) Result bisection( double l, double u, double stoppingError, int maxIter); }

平分.cpp

Result bisection(double l, double u, double stoppingError, int maxIter) {
//code for this function
result.root = xr;
result.relError = e;
result.absError = 1;    
return result;
}

c#代码

    [StructLayout(LayoutKind.Sequential)]
    public struct Result
    {
        public double root;
        public double relError;
        public double absError;            
    }
    [DllImport(dllPath)]
    private static extern Result bisection(double l, double u, double stoppingError, int maxIter);
Result result = bisection(data[0], data[1], 0.1, 100);

从c#中的c++函数返回数组和结构

您的代码几乎是正确的。调用约定不匹配。C++代码使用cdecl,即C#标准调用。换一个,使它们匹配。