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

Invoke C/C++ code from C#

本文关键字:C++ 代码 调用      更新时间:2023-10-16

我通常使用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)

有人可以这么好心地为我指出正确的方向,解释什么是常量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);

这行不通。谢谢!

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