从C#调用C / C ++代码

时间:2012-11-29 15:51:59

标签: c# c++ .net visual-c++ c++-cli

我通常使用C#,但很高兴通过C ++调用C方法。所以我写了一个像这样的C ++包装器:

C ++头文件如下所示:

#pragma once

using namespace System;

namespace CSharpToCPP {

    public ref class SomeWrapper
    {
        public:
        double ReturnValue();
    };
}

C ++代码如下所示:

double CSharpToCPP::SomeWrapper::ReturnValue()
{
    return 1;
}

这给了我可以用C#引用的dll。 C#中的工作代码如下所示:

class Program
{
    static void Main(string[] args)
    {
        SomeWrapper Wrapper = new SomeWrapper();

        Console.WriteLine(Wrapper.ReturnValue());
    }
}

现在我想在C ++方法ReturnValue中创建一些数据并使用此签名调用C方法:

real_T get_value(const e_struct_T parameters, real_T temp)

有人可以这么善良并指出我正确的方向,这解释了const e_struct_T是什么以及如何创建这样的数据? C代码是自动生成的,应采用已知内容的结构。我试图在头文件中定义一个结构,如下所示:

struct Parameters{
    double x;
    int y;
    char z1;
    bool z2;
};

然后使用以下数据填充它:

Parameters Ps;
Ps.x = z2;
Ps.x = 2.0;
在调用get_value之前

get_value(Ps, 10.0);

这不起作用。谢谢!

1 个答案:

答案 0 :(得分:2)

您必须搜索包含e_struct_t定义的头文件,包含在调用文件中,并使用该类型的变量传递给get_value; 顺便说一下,如果要从C#调用的目标方法是纯C,那么您可能应该考虑直接使用P/Invokea tutorial here)而不是创建C ++包装。此外,通过普通的P / Invoke,您将大大简化部署(无需额外的dll)