1

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

这不起作用。谢谢!

4

1 回答 1

2

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

于 2012-11-29T15:57:05.707 回答